Python中对象的平等性

时间:2012-04-27 11:14:11

标签: python equality

我有一个班级MyClass,其中包含两个成员变量foobar

class MyClass:
    def __init__(self, foo, bar):
        self.foo = foo
        self.bar = bar

我有两个这个类的实例,每个实例都有foobar的相同值:

x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')

但是,当我比较它们是否相等时,Python会返回False

>>> x == y
False

如何让python认为这两个对象相等?

2 个答案:

答案 0 :(得分:6)

你必须告诉python你究竟要如何定义相等性。 通过定义这样的特殊方法__eq__来实现:

def __eq__(self, other):
    return self.attrfoo == other.attrfoo # change that to your needs

__cmp__(self, other)是比较类实例的“旧”样式,仅在找不到rich comparison特殊方法时使用。在这里阅读它们:http://docs.python.org/release/2.7/reference/datamodel.html#specialnames

答案 1 :(得分:4)

标准协议用于定义__cmp__()__eq__() and __ne__()

如果不这样做,Python使用对象标识(“地址”)来比较对象。