我有一个我想覆盖该__eq__方法的类。我也应该重写该__ne__方法似乎很有意义。我应该这样__ne__否定实施,__eq__还是一个坏主意?
__eq__
__ne__
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__()以便操作符能够按预期运行。
x==y
x!=y
__eq__()
__ne__()
在很多情况下(例如这种情况),它__eq__与否的结果一样简单,但并不总是如此。