在Python类中支持等价性("相等性")的优雅方法
- 论坛
- 在Python类中支持等价性("相等性")的优雅方法
14 浏览
在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
,即对身份的测试(即,“a
和b
是同一个对象吗?”)。
当定义了__eq__
和__ne__
时,将出现以下行为(这是我们想要的行为):
>>> a = Foo(1) >>> b = Foo(1) >>> a is b False >>> a == b True