1. 程式人生 > >元類type

元類type

body 運行 賦值 ini 展示 rgs tac bject meta

自定義元類來創建類

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