I have a class where I want to override the __eq__
method. It seems to make sense that I should override the __ne__
method as well. Should I implement __ne__
as the negation of __eq__
as such or is it a bad idea?
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)
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 thatx!=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.