I have a class where I want to override the __eq__() operator. It seems to make sense that I should override the __ne__() operator as well, but does it make sense to implement __ne__ based on __eq__ as such?
class A:
def __eq__(self, other):
return self.value == other.value
def __ne__(self, other):
return not self.__eq__(other)
Or is there something that I'm missing with the way Python uses these operators that makes this not a good idea?
解决方案
Yes, that's perfectly fine. In fact, the documentation urges you to define __ne__ when you define __eq__:
There are no implied relationships
among the comparison operators. The
truth of x==y does not imply that x!=y
is false. Accordingly, when defining
__eq__(), one should also define __ne__() so that the operators will behave as expected.
In a lot of cases (such as this one), it will be as simple as negating the result of __eq__, but not always.