我有一个类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认为这两个对象相等?
您应该实现方法__eq__
:
与==比较时的类实例不相等。最好的方法是将cmp
您覆盖了对象中的__cmp__
。
在您的课程中实现__ne__
方法;像这样的东西:
摘要:
比较对象实例时,将调用__ne__
函数。
根据您的具体情况,您可以这样做:
我编写了此文件,并将其放在我项目的__cmp__
模块中。对于不是班级的情况,只需按计划进行,这将遍历两个对象并确保
如果要获得逐个属性的比较,并查看它是否失败以及在何处失败,可以使用以下列表理解:
我尝试了初始示例(请参见上面的7),但在ipython中不起作用。请注意,使用两个相同的对象实例实现时,cmp(obj1,obj2)返回“ 1”。奇怪的是,当我修改一个属性值并重新比较时,使用cmp(obj1,obj2),该对象将继续返回“ 1”。 (叹气...)