0

这可能是非常基本的,但是:

作为XY一个类的对象,调用not x == y会导致我的调试器在类方法中停止,__eq__但调用x != y不会?

检查什么!=?是否等同于is not(参考检查)?

4

2 回答 2

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))
于 2013-10-11T07:52:30.957 回答
5

引用此页面,http://docs.python.org/2/reference/datamodel.html#object。

比较运算符之间没有隐含的关系。的真理x==y并不意味着它x!=y是错误的。因此,在定义 时__eq__(),还应该定义__ne__()操作符的行为与预期一致。__hash__()有关创建支持自定义比较操作并且可用作字典键的可散列对象的一些重要说明,请参阅上的段落。

于 2013-10-11T07:55:58.903 回答