【问题标题】:Python Data Model : confused again with classmethodPython 数据模型:再次与类方法混淆
【发布时间】:2012-02-24 19:19:13
【问题描述】:

据说:

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

【问题讨论】:

    标签: python python-datamodel


    【解决方案1】:

    我和你读的一样。看来 Python 实际所做的与文档中所说的并不完全相同。

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

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

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

    【讨论】:

    • 感谢您的建议!我已经向开发人员发送了一封电子邮件。希望他们能尽快回复!
    • 我发出来后没有任何回应。可以发一份吗?
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多