这可能非常基本但是:
作为同一个类的X
和Y
个对象,调用not x == y
会导致我的调试器在类__eq__
方法中停止,但调用x != y
则不会?
!=
检查什么?它等同于is not
(参考检查)吗?
答案 0 :(得分: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))
答案 1 :(得分:5)
从此页面引用http://docs.python.org/2/reference/datamodel.html#object.ne
比较运营商之间没有隐含的关系。该
x==y
的真相并不意味着x!=y
是假的。因此,何时 定义__eq__()
,还应定义__ne__()
以便{。}} 运营商将按预期行事。请参阅__hash__()
上的段落 关于创建支持自定义的可散列对象的一些重要说明 比较操作,可用作字典键。