为何这两个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里整数和浮点数只要数值相同,==比较就返回Truey字段:两个对象都显式传了2,取值完全一致z字段:都用了默认值0.0,自然相等
三个字段的取值一一匹配,所以自动生成的__eq__方法返回True,最终打印结果就是True。
另外提一句:如果不需要这种按字段比较的行为,可以给装饰器加参数@dataclass(eq=False),这样就会使用Python默认的对象身份比较(只有两个变量指向同一个对象时,==才返回True)。
内容的提问来源于stack exchange,提问作者anonNEWlearner
相关产品推荐
相关产品推荐

