这可能是非常基本的,但是:
作为X
同Y
一个类的对象,调用not x == y
会导致我的调试器在类方法中停止,__eq__
但调用x != y
不会?
检查什么!=
?是否等同于is not
(参考检查)?
这可能是非常基本的,但是:
作为X
同Y
一个类的对象,调用not x == y
会导致我的调试器在类方法中停止,__eq__
但调用x != y
不会?
检查什么!=
?是否等同于is not
(参考检查)?
!=
操作员调用__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))
引用此页面,http://docs.python.org/2/reference/datamodel.html#object。氖
比较运算符之间没有隐含的关系。的真理
x==y
并不意味着它x!=y
是错误的。因此,在定义 时__eq__()
,还应该定义__ne__()
操作符的行为与预期一致。__hash__()
有关创建支持自定义比较操作并且可用作字典键的可散列对象的一些重要说明,请参阅上的段落。