在Python类中支持等价性("相等性")的优雅方法

14 浏览
0 Comments

在Python类中支持等价性("相等性")的优雅方法

在编写自定义类时,通过==!=运算符允许等价比较通常很重要。在Python中,可以通过分别实现__eq____ne__特殊方法来实现。我找到的最简单的方法是以下方法:

class Foo:
    def __init__(self, item):
        self.item = item
    def __eq__(self, other):
        if isinstance(other, self.__class__):
            return self.__dict__ == other.__dict__
        else:
            return False
    def __ne__(self, other):
        return not self.__eq__(other)

你知道更优雅的方法吗?你知道使用上述比较__dict__的方法有什么特定的缺点吗?

注意:稍作说明--当未定义__eq____ne__时,将出现以下行为:

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False

也就是说,a == b的结果为False,因为实际上运行的是a is b,即对身份的测试(即,“ab是同一个对象吗?”)。

当定义了__eq____ne__时,将出现以下行为(这是我们想要的行为):

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
True

0