它说:
Reference 中的当它产生一个类方法对象时,它会被转换为一个 绑定的用户定义的方法对象,其im_class和im_self属性 都是C.
我做了一个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 :(得分:0)
我以同样的方式阅读。看起来Python实际上做的并不完全是文档所说的。
它将im_self
设置为类,将im_class
设置为类的类型,即其元类。 Python中类的默认元类是type
。这类似于绑定到实例的方法所发生的情况:im_self
是实例,im_class
是实例的类型。换句话说,在@classmethod
的情况下,该类被视为实例(它是实例;它是type
的实例)。
可能在没有更新文档的情况下更改了行为,或者开始时文档是错误的。我为了生活而编写文档,我可以确认,对于像Python这样大小的东西,几乎不可能保持100%正确 - 特别是对于像这样的模糊细节。
Python开发人员有一个报告文档中的错误的过程。 Give it a try!