2012-02-02 19 views
3

據說:Python的數據模型:困惑再次用類方法

當將產生一個類的方法的對象,它被轉換成其im_class一個 結合用戶定義的方法對象和im_self屬性 均爲C.

Reference

而且我做了一個EX。

>>> class C(object) : 
...  @classmethod 
...  def cm(cls) : print cls 
... 
>>> C.cm 
<bound method type.cm of <class '__main__.C'>> 
>>> C.cm.im_self 
<class '__main__.C'> 
>>> C.cm.im_class 
<type 'type'> 

我不難理解這種現象。但不幸的是,在參考文獻中,它告訴im_self應該與im_class的相同。如何解釋不一致?

回答

0

我的閱讀方式和你一樣。看起來,Python實際上在做什麼並不完全是文檔所說的。

它將im_self設置爲類,im_class設置爲類的類型,即其元類。 Python中的類的默認元類是type。這與綁定到實例的方法發生的情況類似:im_self是實例,im_class是實例的類型。在@classmethod的情況下,換句話說,該類被視爲實例(它是;它是type的一個實例)。

可能是在沒有更新文檔的情況下更改了行爲,或者文檔剛開始時是錯誤的。我寫文檔是爲了生活,我可以確認幾乎不可能對Python的大小保持100%正確 - 尤其是對於像這樣的晦澀的細節。

Python開發人員有一個報告文檔中錯誤的過程。 Give it a try

+0

感謝您的建議!我已經向開發者發送了一封電子郵件。希望他們能很快回復! – Determinant 2012-02-02 04:57:00

+0

自從我發送出去後,我還沒有收到任何回覆。你可以發一張嗎? – Determinant 2012-02-05 12:15:57