Python docsによると、「を定義するときは、演算子が期待どおりに動作するように__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 ドキュメントです。更新されていないだけですか?