Python提供了重载==
运算符AND !=
运算符的功能。但为什么?重载==
是不够的,!=
自动与==
相反(实际值)?
一个人的结果不应该自动暗示对方吗?
答案 0 :(得分:6)
你没有 ,而python并没有强迫你去。事实上,documentation解释了为什么和为什么:
默认情况下,
__ne__()
委托给__eq__()
并反转结果 除非是NotImplemented
。没有其他隐含的关系 例如,在比较运算符中,(x<y
或x==y
)的真实性并不意味着x<=y
。
一般而言,x==y
的真实性并不需要暗示x!=y
是错误的。如果您的数据模型需要反映这种关系,那么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
在python-3.x上返回False
,但在python-2.x上返回True
(因为__ne__
并不隐含在python-2.x上,并且通常,如果两个用户定义的对象的ID不相同(即,不是同一个对象),则它们不相等。