python中的元類別是指用來建立類別的物件。 python中的type()函數其實就是一個元類,type()函數用來建立所有類別的元類。如果要建立自訂的元類,也要從type中繼承。
在python中,類別也是對象,當我們使用class關鍵字創建一個類別的時候,Python解釋器只是掃描一下class定義的語法,然後呼叫type()函數建立出class。那你知道創建類別的是什麼嗎?其實他是元類。
元類別是什麼?
元類別其實就是用來建立類別的物件。
為了幫助我們理解,我們可以這樣想,我們創建類別就是為了創建類別的實例,同樣的,我們創建元類別就是為了創建類別。
元類別就是類別(實例)的類別,就像下面這樣:
Metaclass() = class class() = object # object==>实例
理解了什麼是元類,我們再來看看type ()函數。
其實type就是一個元類,type就是我們用來建立所有的類別的元類別。 (如果我們要創建自己定義的元類別的話,也要從type中繼承)
元類別的工作原理:
我們來看一下下面這個範例
class ReedSunMetaclass(type): pass class Foo(object, metaclass = ReedSunMetaclass): pass class Bar(Foo): pass
首先,我們建立了一個元類別ReedSunMetaclass
(注意!按照預設習慣,元類別的類別名稱總是以Metaclass結尾,以便清楚地表示這是一個元類別)。
然後,我們又用元類別ReedSunMetaclass建立了一個Foo類別。
(同時,Foo類別的屬性__metaclass__就變成了ReedSunMetaclass)。
最後,我們建立了一個子類別Bar繼承自Foo。
我們來試著理解一下在python內部是怎麼執行這幾個步驟的:
對於父類別Foo,Python會在類別的定義中尋找_ _metaclass__屬性,如果找到了,Python就會用它來建立類別Foo,如果沒有找到,就會用內建的type來建立這個類別。很顯然,它找到了。
對於子類別Bar, python會先在子類別中尋找__metaclass__屬性,如果找到了,Python就會用它來創建類別Bar,如果沒有找到,就再從父類別中尋找,直到type。顯然,它在父類別中找到了。
我們可以看到使用元類別的一個好處了,即他可以讓子類別隱式的繼承一些東西。
以上是Python中的元類別(metaclass)是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!