1. ホーム
  2. python

[解決済み] ne__は__eq__の否定として実装されるべきか?

2022-05-15 16:53:53

質問

クラスをオーバーライドして __eq__ メソッドをオーバーライドしたいクラスがあります。メソッドをオーバーライドするのは理にかなっているように思えます。 __ne__ メソッドもオーバーライドするのが筋のようです。私は __ne__ の否定として __eq__ を否定するようなものなのでしょうか?

class A:

    def __init__(self, state):
        self.state = state

    def __eq__(self, other):
        return self.state == other.state

    def __ne__(self, other):
        return not self.__eq__(other)

どのように解決するのですか?

はい、それは全く問題ありません。 実際には のドキュメントでは を定義するよう促しています。 __ne__ を定義するときに __eq__ :

比較演算子の間に暗黙の関係はない 比較演算子間の暗黙の関係はありません。また の真偽は x==y が真であることを意味するわけではありません。 x!=y が偽であることを意味しない。したがって __eq__() を定義する場合、同時に __ne__() を定義して、演算子が期待通りに動作するようにします。

多くの場合(今回のような)単純に __eq__ の結果を否定するのと同じくらい簡単ですが、常にそうとは限りません。