根据Python 文档:“在定义时__eq__()
,还应该定义__ne__()
,以便运算符按预期运行”。
但是,Python 的计算似乎是__ne__
自动的not __eq__
:
In [8]: class Test:
def __eq__(self, other):
print("calling __eq__")
...: return isinstance(other, Test)
...:
In [9]: a = Test()
In [10]: b = Test()
In [11]: a == b
calling __eq__
Out[11]: True
In [12]: a != b
calling __eq__
Out[12]: False
In [13]: a == 1
calling __eq__
Out[13]: False
In [14]: a != 1
calling __eq__
Out[14]: True
那么定义__ne__
它是否只是将是有什么意义return not self.__eq__(other)
呢?此外,这种行为实际记录在哪里?
编辑
显然,我使用 Python 3 很重要。在 Python 2 中,我得到
In [1]: class Test(object):
...: def __eq__(self, other):
...: print("calling __eq__")
...: return isinstance(other, Test)
...:
In [2]: a = Test()
In [3]: b = Test()
In [4]: a == b
calling __eq__
Out[4]: True
In [5]: a != b
Out[5]: True
In [6]: a == 1
calling __eq__
Out[6]: False
In [7]: a != 1
Out[7]: True
但我引用的文档是 Python 3 文档。他们只是没有更新吗?