有没有理由不这样做来比较两个对象:
def __eq__(self, other):
return self.get_a() == other.get_a() and self.get_b() == other.get_b() and ...
而不是检查每个属性:
Barrier
最初我有后者,但认为前者是更清洁的解决方案。
答案 0 :(得分:4)
你可以明确而简洁:
def __eq__(self, other):
fetcher = operator.attrgetter("a", "b", "c", "d")
try:
return self is other or fetcher(self) == fetcher(other)
except AttributeError:
return False
只是比较__dict__
属性(如果使用__slots__
可能不存在),您就会面临对象存在意外属性的风险:
class A:
def __init__(self, a):
self.a = a
def __eq__(self, other):
return self.__dict__ == other.__dict__
a1 = A(5)
a2 = A(5)
a1.b = 3
assert a1 == a2 # Fails
答案 1 :(得分:0)