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

为何这两个Python dataclass类实例会判定为相等?

为什么这段dataclass代码的==比较结果是True?

先看你提供的代码:

from dataclasses import dataclass

@dataclass
class ThreeDPoint:
    x: int | float
    y = 0.0
    z: int | float = 0.0

point_1 = ThreeDPoint(1.0,2)

point_3 = ThreeDPoint(1,2)
print(point_1 == point_3)

运行后输出True,核心原因是@dataclass装饰器的默认行为:

  • 它会自动帮你生成__eq__方法,这个方法专门负责处理两个dataclass对象的相等性比较。
  • 生成的__eq__会逐个对比两个对象的所有字段值,只要每个对应字段的取值都相等,就判定两个对象相等。

具体到你的代码里:

  • x字段:point_1.x是1.0,point_3.x是1,Python里整数和浮点数只要数值相同,==比较就返回True
  • y字段:两个对象都显式传了2,取值完全一致
  • z字段:都用了默认值0.0,自然相等

三个字段的取值一一匹配,所以自动生成的__eq__方法返回True,最终打印结果就是True。

另外提一句:如果不需要这种按字段比较的行为,可以给装饰器加参数@dataclass(eq=False),这样就会使用Python默认的对象身份比较(只有两个变量指向同一个对象时,==才返回True)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:53:13