我有點測試,以充分理解python中的元類。爲什麼元類有一個類型?
class Test(object):
pass
print Test.__class__
print Test.__class__.__class__
print Test.__class__.__class__.__class__
所有的結果都是一樣的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 'type'>
也是一個對象並應引用某些類/類型。但由於這是一種特殊的對象,它的屬性__class__
提到自己:
>>> (1).__class__.__class__.__class__ is (1).__class__.__class__
True
當你做Test.__class__
,你會得到類型Test
,這是type
(因爲Test
是一個類標識符)。
type
本身又是一個類標識符,這樣你就可以調用__class__
(從object
繼承)就可以了,你回來,它的類型是,再次,type
因爲它是一個類標識符。
因爲你總是會回來type
,這本身就是一個類,你可以無限次地做到這一點,並且總是會回到當前對象的類型爲type
。
所有的類都是類,這意味着它們是從一個叫做類類派生...
所有python的類對象是通過內置的函數類型建立()。你也可以試試這個。
>>> T.__class__ == type
True
>>> type(type)
<type 'type'>
的T. 類等於內建功能型這也是一個對象實現的呼叫功能。這是一個屬性將被解釋爲類(T)。由於你的T類沒有基類,因此使用type()將返回類型對象。
你可以檢查關於customizing class creation的python文檔來獲得關於類創建的詳細信息。
爲了確定適當的元類
謝謝,我誤解其附加雷斯是不一樣的。 –