元类type

Posted 隔壁古二蛋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了元类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)

 

以上是关于元类type的主要内容,如果未能解决你的问题,请参考以下文章

理解python元类

Python元编程元类

0903——元类

096 元类

元类type

python中通过元类(TYPE)简单实现对象关系映射(ORM)