查找覆盖__eq__的python对象列表的唯一元素

时间:2015-12-22 18:08:59

标签: python class oop collections

我编写了一个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以获取我正在寻找的行为?

0 个答案:

没有答案