元類type
阿新 • • 發佈:2018-02-25
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 returnobj 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