首頁  >  文章  >  後端開發  >  Python中的元類別(metaclass)是什麼

Python中的元類別(metaclass)是什麼

little bottle
little bottle原創
2019-05-24 17:36:314159瀏覽

python中的元類別是指用來建立類別的物件。 python中的type()函數其實就是一個元類,type()函數用來建立所有類別的元類。如果要建立自訂的元類,也要從type中繼承。

Python中的元類別(metaclass)是什麼

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn