我们如何在Python类中使用等价(“相等”)运算符?

如果使用下面的代码中的相等运算符,则输出为false

class Integer:
    def __init__(self, number):
        self.number = number

n1 = Integer(1)
n2 = Integer(1)
print bool(n1 == n2)

输出结果

False

这是因为默认情况下,Python使用对象标识符进行比较操作:

为了克服这个问题,我们必须重写__eq__function

class Integer:
    def __init__(self, number):
        self.number = number
    def __eq__(self, other):

       if isinstance(self, other.__class__):

          return self.__dict__ == other.__dict__

       return False
n1 = Integer(1)
n2 = Integer(1)
print bool (n1 == n2)
print bool (n1 != n2)

输出结果

True
True

对于Python 2.x,我们还必须覆盖__ne__函数。对于Python 3.x,这不是必需的。根据文档,以下内容适用。

默认情况下,除非未实现,否则__ne __()委托给__eq __()并反转结果。比较运算符之间没有其他隐含关系,例如,(x <y或x == y)的真相并不意味着x <= y。