Python 数据模型:再次与类方法混淆
Posted
技术标签:
【中文标题】Python 数据模型:再次与类方法混淆【英文标题】:Python Data Model : confused again with classmethod 【发布时间】: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 相同。如何解释不一致?
【问题讨论】:
【参考方案1】:我和你读的一样。看来 Python 实际所做的与文档中所说的并不完全相同。
它将im_self
设置为类,并将im_class
设置为类的类型,即它的元类。 Python 中类的默认元类是type
。这类似于绑定到实例的方法所发生的情况:im_self
是实例,im_class
是实例的类型。在@classmethod
的情况下,换句话说,类被视为实例(它是;它是type
的实例)。
可能在没有更新文档的情况下更改了行为,或者文档一开始就是错误的。我以编写文档为生,我可以确认,对于 Python 大小的东西来说,几乎不可能保持 100% 正确——尤其是对于像这样的晦涩细节。
Python 开发人员在文档中有一个报告错误的程序。 Give it a try!
【讨论】:
感谢您的建议!我已经向开发人员发送了一封电子邮件。希望他们能尽快回复! 我发出来后没有任何回应。可以发一份吗?以上是关于Python 数据模型:再次与类方法混淆的主要内容,如果未能解决你的问题,请参考以下文章
6_1 持久化模型与再次加载_探讨_import_meta_graph方式加载持久化模型会存在的变量管理命名混淆的问题