比较两个对象

时间:2010-08-23 18:05:06

标签: python

有没有办法检查两个对象是否具有相同的值,除了迭代它们的属性并手动比较它们的值?

4 个答案:

答案 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。