我有一个班级MyClass
,其中包含两个成员变量foo
和bar
:
class MyClass:
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
我有两个这个类的实例,每个实例都有foo
和bar
的相同值:
x = MyClass('foo', 'bar')
y = MyClass('foo', 'bar')
但是,当我比较它们是否相等时,Python会返回False
:
>>> x == y
False
如何让python认为这两个对象相等?
答案 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使用对象标识(“地址”)来比较对象。