2012-02-02 64 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