![](/img/trans.png)
[英]Why does .mro() on a metaclass have a different signature? `descriptor 'mro' of 'type' object needs an argument`
[英]Why do metaclass have a type?
我做了一點測試以完全理解python中的元類。
class Test(object):
pass
print Test.__class__
print Test.__class__.__class__
print Test.__class__.__class__.__class__
所有結果都是同一type
。 但是他們每個人的地址都不一樣
我真的無法理解為什么元類具有遞歸的元類。
請向我解釋?
實際上,地址是相同的:
>>> id(Test.__class__)
6384576
>>> id(Test.__class__.__class__)
6384576
>>> id(Test.__class__.__class__.__class__)
6384576
一切都是Python中的對象,每個對象都必須具有一個類(它應該屬於某種類型)。 您可以通過__class__
屬性訪問該類/類型引用,例如:
>>> (1).__class__
<type 'int'>
所有內容都包括類本身,這些類屬於稱為type
的類/ type
:
>>> (1).__class__.__class__
<type 'type'>
同時, type 'type'>
也是一個對象,應該引用某些類/類型。 但是,由於這是一種特殊的對象,因此它的__class__
屬性指向自身:
>>> (1).__class__.__class__.__class__ is (1).__class__.__class__
True
當您執行Test.__class__
,您將獲得類型為Test
type
,因為Test
是一個類標識符。
type
本身又是一個類標識符,因此您可以在其上調用__class__
(從object
繼承),然后您又得到它的類型又是type
因為它是一個類標識符。
因為您將始終獲得type
本身的類,所以您可以無限次地執行此操作,並且始終獲得當前對象的類型是type
。
所有類都是類,這意味着它們是從稱為class的類派生的。
python的所有類對象均由內置函數type()構建。 您也可以嘗試一下。
>>> T.__class__ == type
True
>>> type(type)
<type 'type'>
T. 類等於內置函數類型,后者也是實現調用函數的對象。 它的一個屬性將被解釋為類 (T)。 由於您的T類沒有基類,因此使用type()來返回類型對象。
您可以查看有關自定義類創建的python文檔,以獲取有關類創建的詳細信息。
確定適當的元類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.