元類別一般用於建立類別。在執行類別定義時,解釋器必須要知道這個類別的正確的元類別。解釋器會先尋找類別屬性metaclass,如果此屬性存在,就將這個屬性賦值給此類作為它的元類別。如果此屬性沒有定義,它會向上查找父類中的metaclass.如果還沒有發現metaclass屬性,解釋器會檢查名字為metaclass的全域變數,如果它存在,就使用它作為元類。否則, 這個類別就是一個傳統類別,並用 types.ClassType 作為此類的元類別。
在執行類別定義的時候,將檢查此類正確的(一般是預設的)元類別,元類別(通常)傳遞三個參數(到建構器): 類別名稱,從基底類別繼承資料的元組,和(類別的)屬性字典。
元類別何時被創建?
#!/usr/bin/env python print '1. Metaclass declaration' class Meta(type): def init(cls, name, bases, attrd): super(Meta,cls).init(name,bases,attrd) print '3. Create class %r' % (name) print '2. Class Foo declaration' class Foo(object): metaclass=Meta def init(self): print '*. Init class %r' %(self.class.name) # 何问起 hovertree.com print '4. Class Foo f1 instantiation' f1=Foo() print '5. Class Foo f2 instantiation' f2=Foo() print 'END' 输出
結果:
1. Metaclass declaration
#2. Class Foo declaration
3. Create class 'Foo'
4 . Class Foo f1 instantiation
*. Init class 'Foo'
5. Class Foo f2 instantiation
##*. Init class 'Foo'#END 可見在類別申明的時候,就執行了metaclass中的方法了,以後在定義類別物件的時候,就只呼叫該類別的init()方法,MetaClass中的init()只在類別申明的時候執行了一次。
以上是關於python的metaclass詳細說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!