我编写了一个python类,它覆盖了 eq 和 neq 。我习惯使用
获取 seq 序列中的唯一元素列表unique_element_list = list(set(seq))
这似乎不适用于包含我的类实例的列表,我不知道为什么。
按照这里的建议Elegant ways to support equivalence ("equality") in Python classes,我写了我的课程如下:
class MyObject(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.__dict__ == other.__dict__
else:
return False
def __ne__(self, other):
return not self.__eq__(other)
现在这是这个类的三个实例:
obj1 = MyObject(1, 2)
obj2 = MyObject(3, 4)
obj3 = MyObject(1, 2)
obj1 == obj2
False
obj1 == obj3
True
好的,到目前为止一切顺利。但现在:
obj_list = [obj1, obj2, obj3]
len(obj_list)
3
len(set(obj_list))
3
list(set(obj_list)) == obj_list
True
我希望最后一行代码返回 False ,而前面的代码返回 2 ,因为 obj_list 只包含两个唯一条目。为什么 set 操作无法使用我自定义的 eq 方法正常工作?如何更改MyObject以获取我正在寻找的行为?