2013-03-29 63 views
0

我嘗試print type (variable)看到什麼類是可變的,REPL告訴我:型`instance`在python

<type 'instance'> 

有沒有辦法,看看如何構建/誰建造的變量?

+0

請注意[PEP-8](http://www.python.org/dev/peps/pep-0008/#pet-peeves)建議不要在功能和括號之間放置空格:'print type (可變)'是首選的樣式。 –

回答

7

這意味着你正在使用舊式的類。在新的代碼,所有的類都應該從object繼承:

In [3]: class A(object): 
    ...:   pass 

In [5]: type(A()) 
Out[5]: __main__.A 

 

,您仍然可以通過查看__class__獲取類舊式類:

In [1]: class A: pass 

In [2]: A().__class__ 
Out[2]: __main__.A 

 

http://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes

類和實例有兩種風格:舊式(或經典)和新式。

在Python 2.1之前,老式的類是用戶唯一可用的風格。 (舊式)類的概念與類型概念無關:如果x是舊式類的實例,則x.__class__指定x的類,但type(x)總是<type 'instance'>。這反映了所有舊式實例與其類別無關,都使用一個稱爲實例的內置類型實現。

在Python 2.2中引入了新風格的類來統一類和類型。新風格的類既不多也不少於用戶定義類型。如果x是新風格類的實例,則type(x)通常與x.__class__相同(儘管這不能保證 - 新風格的類實例被允許覆蓋爲x.__class__返回的值)。

...

出於兼容性考慮,類仍然是舊式默認。通過將另一個新樣式類(即一個類型)指定爲父類,或者如果不需要其他父類,則可以創建新樣式類。除了type()返回的內容之外,新風格類的行爲與舊風格類的行爲有很多重要的細節。其中一些更改對於新對象模型來說很重要,就像特殊方法被調用的方式一樣。其他的是「修復」,在兼容性問題之前無法實現,比如多重繼承情況下的方法解析順序。

在Python 3中刪除舊式類,只留下新式類的語義。

+0

在Python 2.x中,請注意,如果您使用3.x,則舊式類不再存在,並且暗示「對象」(儘管在此處不存在任何傷害)。 –

+0

我打印了'state .__ class__',它工作。太好了!謝謝 ! – alinsoar

+0

哦。你仍然可以'打印狀態.__ class__'。更新我的回答 –

相關問題