gpt4 book ai didi

python - 为什么可以在类中同时覆盖 __eq__ 和 __ne__?

转载 作者:行者123 更新时间:2023-11-28 20:59:02 26 4
gpt4 key购买 nike

Python 提供重载== 运算符和!= 运算符的功能。但为什么?重载 == 并且 != 自动与 == 相反(真值)还不够吗?

一个的结果不应该自动暗示另一个吗?

最佳答案

你不需要,python 不会强制你。事实上,documentation解释是什么和为什么:

By default, __ne__() delegates to __eq__() and inverts the result unless it is NotImplemented. There are no other implied relationships among the comparison operators, for example, the truth of (x<y or x==y) does not imply x<=y.

一般来说,x==y的真相不需要暗示 x!=y是假的。如果您的数据模型需要反射(reflect)这种关系,Python 可以让您毫不费力地做到这一点。

请注意,对于早期版本的 python,甚至没有暗示这种关系。例如,

class Foo:
def __init__(self, val):
self.val = val

def __eq__(self, other):
return self.val == other.val

f1, f2 = Foo(1), Foo(1)

现在,f1 == f2返回 True在任何版本上。然而,f1 != f2返回 False在 python-3.x 上,但是 True在 python-2.x 上(因为 __ne__ 在 python-2.x 上并不隐含,一般来说,如果两个用户定义的对象的 ID 不同,则它们不相等,即,不是同一个对象)。

关于python - 为什么可以在类中同时覆盖 __eq__ 和 __ne__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com