2012-06-25 129 views
2

我正在閱讀關於元類What is a metaclass in Python?上的這篇優秀文章。接受的答案顯示瞭如何使用type創建一個具有以下簽名的班級。是否在Python中創建類「對象」

type(name of the class, 
     tuple of the parent class (for inheritance, can be empty), 
     dictionary containing attributes names and values) 

這讓我想知道是誰創建的對象類。對象類是否也由type類創建?

+0

pssst,Karthick:加入http://bostonpython.com,如果你還沒有... –

+0

@NedBatchelder當然。我已經做了!謝謝。 –

回答

6

理論上你是對的。 objecttype的實例。但是,當你檢查type的基類時,你會發現type繼承自object!怎麼會這樣?

事實是,這是Python解釋器中的硬編碼。給出了objecttype;實際上並沒有以任何方式參與創造另一方。

+1

不,類型從類型 –

+0

繼承正確..類型從對象繼承和對象是通過類型實例化..這是如何可能的,因此這個問題! –

+2

@Jon:'type .__ mro__ ==()'。還有'issubclass(type,object)== True'。 – kindall

0

type是有點 - 嗯,不知道如何描述它 - 怪人的語言。

它可以用來做類型(someobj)或用作某種類型的構造函數(帶有3個參數)來創建從具有實例的基礎派生的新類型。正如你已經看到的元類 - 它是有用的工廠類 - 雖然,恕我直言,除非你真的想太聰明,使用類裝飾器使這個2.6+更容易

3

這些rarified對象/類型層次結構的級別是,諸如objecttype之類的東西不是在.py文件中創建的,它們是在C代碼中靜態創建的,以及CPython的其他基礎基礎。所以它們不一定是用任何特定的Python代碼「創建」的。