比较两个对象

18 投票
4 回答
29857 浏览
提问于 2025-04-16 03:11

有没有什么方法可以检查两个对象的值是否相同,而不是一个个属性地去对比它们的值呢?

4 个回答

2

你可以直接比较 namedtuple
否则,你需要自己定义一些比较的方法,比如 __eq__(表示相等)和可能的 __ne__(表示不相等),
或者你可以定义 __cmp__ 方法。

想了解更多信息,可以查看 数据模型

6

为了进一步解释delnan的回答:

_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
11

@Joe Kington的解决方案在对象有__dict__的时候有效(有些对象,包括内置对象,是没有这个的),而且__eq__必须对两个字典的所有值都能正常工作(如果__eq__写得不好,可能会抛出异常等)。但是这种做法非常不符合Python的风格。它甚至不能正确处理名义子类型……更不用说结构子类型了(也就是那些可以用来进行鸭子类型检查的类型)。不要这样做。

通常来说,自己写一个专门的__eq__方法会更好,这个方法只比较一些重要的属性。例如,Rational类应该只比较分子和分母,其他的就不需要了。

撰写回答