0

これはおそらく非常に基本的なことですが、次のとおりです。

同じクラスのオブジェクトであるため、呼び出すXとデバッガーがクラスメソッドで停止しますが、呼び出しは停止しませんか?Ynot x == y__eq__x != y

!=をチェックしますか?is not(参照チェック)と同等ですか?

4

2 に答える 2

8

オペレーターは特別なメソッドを!=呼び出します。__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))
于 2013-10-11T07:52:30.957 に答える