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方式加载持久化模型会存在的变量管理命名混淆的问题

深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天

逻辑模型的混淆矩阵

1.6 分类模型的评估方法

VHDL中行为和数据流模型程序之间的混淆

Python混淆矩阵中的模型精度为0%