zoukankan      html  css  js  c++  java
  • 元类type

    自定义元类来创建类,也就是自定义的方法来创建类

    python中的类也是对象,是type类的对象

    在编译器运行到class Foo的时候自动运行Foo = type('Foo',{object,},{})来创建类对象并放入内存中

    下面的例子展示了实例创建的过程

     1 class MyType(type):
     2     def __init__(self, *args,**kwargs):
     3         type.__init__(self,*args,**kwargs)
     4         print('第一步:解释器执行到class Foo时,创建Foo类对象')
     5     def __call__(self, *args, **kwargs):
     6         print('第二步:foo = Foo("foo")时调用元类的__call__方法,在此方法中创建实例')
     7         #foo = Foo("foo") = MyType('Foo',(object,),{})()
     8         obj = self.__new__(self)
     9         print('第四步:实例创建完毕,执行实例的__init__方法')
    10         self.__init__(obj, *args, **kwargs)
    11         #返回实例,在外部赋值给foo
    12         return obj
    13 
    14 class Foo(object,metaclass=MyType):
    15     def __init__(self,name):
    16         self.name = name
    17     def __new__(cls, *args, **kwargs):
    18         print('第三步:返回实例')
    19         return object.__new__(cls)
    20 # 第一阶段:解释器从上到下执行代码创建Foo类
    21 # 第二阶段:通过Foo类创建obj对象
    22 foo = Foo('foo')
    23 print(foo)
    24 print(foo.name)
  • 相关阅读:
    js 与或运算符 || && 妙用(great!!!)
    type of && undefined
    全新框架?微信小程序与React Native的异同之处
    JS-十五章(15.16)
    JS-第十三章
    ValueError: zero-size array to reduction operation maximum which has no identity
    time
    模块
    day8-函数
    day7-format字符串格式化
  • 原文地址:https://www.cnblogs.com/cx59244405/p/8470142.html
Copyright © 2011-2022 走看看