有没有办法检查两个对象是否具有相同的值,除了迭代它们的属性并手动比较它们的值?
答案 0 :(得分:9)
@Joe Kington的解决方案是有效的,如果有__dict__
(某些对象,包括内置,没有),__eq__
适用于两个dicts的所有值(写得不好{{1 mayraise例外等)。但它是非常不可思议的。它甚至不能正确处理名义上的子类型......更不用说结构子类型(即你可以使用的类型/鸭子类型)。 不要这样做。
但通常你最好使用手工定制的__eq__
方法,只比较一些重要的属性。例如。理性应该只比较分子和分母,仅此而已。
答案 1 :(得分:6)
阐述德尔南的回答:
_NOTFOUND = object()
class Rational(object):
def __eq__(self, other):
for attr in ['numerator', 'denominator']:
v1, v2 = [getattr(obj, attr, _NOTFOUND) for obj in [self, other]]
if v1 is _NOTFOUND or v2 is _NOTFOUND:
return False
elif v1 != v2:
return False
return True
答案 2 :(得分:2)
您可以直接比较namedtuple
否则,您必须定义自己的丰富比较__eq__
和可能的__ne__
或者你自己的__cmp__
请参阅datamodel了解详情
答案 3 :(得分:-3)
object1.__dict__ == object2.__dict__
应该是你所需要的,我想......
编辑:vars(object1) == vars(object2)
可能更加pythonic,尽管@delnan对有没有int
的对象(例如__dict__
s)提出了有效的观点。我不同意自定义__eq__
对于简单案例来说是一种更好的方法,但是......如果快速和肮脏完美地做你需要的东西,有时候不值得努力超越快速和肮脏,i.m.h.o。