You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未重载==运算符的类的实例对象值如何定义?

Python对象的标识、类型与值的定义探讨

来自Python参考文档:

每个对象都有标识、类型和值。
比较运算符实现了对对象值的特定定义。可以认为它们通过比较实现间接定义了对象的值。

Luciano Ramalho在其著作《流畅的Python》第二版第206页中提到:

运算符==比较对象的值(它们存储的数据),而is比较对象的标识。

基于此,我总结出一种可行的对象值定义(也是官方参考文档隐含的严谨无细节定义):对象的值是该对象的__eq__()方法所使用的数据。但问题来了——有些类并未重写__eq__()方法,这类类的实例对象的值该如何定义?

(注:我并非寻求绝对严格的定义,因为这类定义可能并不存在。我需要的是比“对象的值是其代表的信息”更实用的解释——这句话没错,但过于抽象,实用性不强。)


举个例子,假设我们有一个函数f,它是内置function类的实例。该类未重写__eq__()方法,因此此时==运算符仅比较操作数的标识(当两个操作数均为函数时)。但显然不能说对象f的值等同于其标识:有观点认为用户自定义函数是可变对象,即可以修改其值,但任何对象的标识都无法被修改。因此f的值不等于id(f),它需要另一种定义方式,我希望能得到适用于CPython的恰当定义。

我曾看到过关于函数对象值的定义:

它的“值”是一组其他值,这些值足以定义完全相同的函数。

但我不确定这是否属于“标准”定义。

内容的提问来源于stack exchange,提问作者Rodvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:30:59