6

我有一个类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认为这两个对象相等?

4

2 回答 2

8

你必须告诉 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

于 2012-04-27T11:16:09.217 回答
5

标准协议是定义__cmp__()or__eq__()__ne__()

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

于 2012-04-27T11:16:01.287 回答