簡體   English   中英

為什么元類具有類型?

[英]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文檔,以獲取有關類創建的詳細信息。

確定適當的元類

  • 如果沒有給出基數並且沒有給出明確的元類,則使用type()
  • 如果給出了顯式元類並且它不是type()的實例,則將其直接用作元類
  • 如果將type()的實例作為顯式元類給出,或者定義了基類,則使用派生程度最高的元類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM