これはおそらく非常に基本的なことですが、次のとおりです。
同じクラスのオブジェクトであるため、呼び出すX
とデバッガーがクラスメソッドで停止しますが、呼び出しは停止しませんか?Y
not x == y
__eq__
x != y
何!=
をチェックしますか?is not
(参照チェック)と同等ですか?
これはおそらく非常に基本的なことですが、次のとおりです。
同じクラスのオブジェクトであるため、呼び出すX
とデバッガーがクラスメソッドで停止しますが、呼び出しは停止しませんか?Y
not x == y
__eq__
x != y
何!=
をチェックしますか?is not
(参照チェック)と同等ですか?
オペレーターは特別なメソッドを!=
呼び出します。__ne__
を定義するクラスは、逆を行うメソッド__eq__
も定義する必要があります。__ne__
__eq__
、__ne__
、およびを提供する典型的なパターンは__hash__
次のようになります。
class SomeClass(object):
# ...
def __eq__(self, other):
if not isinstance(other, SomeClass):
return NotImplemented
return self.attr1 == other.attr1 and self.attr2 == other.attr2
def __ne__(self, other):
return not (self == other)
# if __hash__ is not needed, write __hash__ = None and it will be
# automatically disabled
def __hash__(self):
return hash((self.attr1, self.attr2))