Python数据模型:再次与classmethod混淆

时间:2012-02-02 04:32:56

标签: python python-datamodel

它说:

  

当它产生一个类方法对象时,它会被转换为一个   绑定的用户定义的方法对象,其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一样相同。如何解释不一致?

1 个答案:

答案 0 :(得分:0)

我以同样的方式阅读。看起来Python实际上做的并不完全是文档所说的。

它将im_self设置为类,将im_class设置为类的类型,即其元类。 Python中类的默认元类是type。这类似于绑定到实例的方法所发生的情况:im_self是实例,im_class是实例的类型。换句话说,在@classmethod的情况下,该类被视为实例(它是实例;它是type的实例)。

可能在没有更新文档的情况下更改了行为,或者开始时文档是错误的。我为了生活而编写文档,我可以确认,对于像Python这样大小的东西,几乎不可能保持100%正确 - 特别是对于像这样的模糊细节。

Python开发人员有一个报告文档中的错误的过程。 Give it a try