3

据说:

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

4

1 回答 1

0

我和你读的一样。看来 Python 实际所做的并不完全像文档所说的那样。

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

可能在没有更新文档的情况下更改了行为,或者文档一开始就是错误的。我以编写文档为生,我可以确认,对于 Python 大小的东西来说,几乎不可能保持 100% 正确——尤其是对于像这样的晦涩细节。

Python 开发人员在文档中有一个报告错误的过程。试一试

于 2012-02-02T04:43:30.963 回答