比较两个列表中的用户定义对象

时间:2019-03-07 11:13:15

标签: python python-3.x

我有一个类MyClass,在这里我也重写了__eq__方法来比较该类的两个对象,我可以这样做:

obj1 = MyClass(a = 2)
obj2 = MyClass(a = 2)

obj1 == obj2 # gives me True

现在,我的问题是我有两个包含此类的对象的列表,并且我想比较这两个列表的set是否相同。这样我期望:

list1 = [MyClass(a=1), MyClass(a=2)]
list2 = [MyClass(a=2), MyClass(a=1)]

set(list1) == set(list2)

给我True。但是我遇到了这个错误:

TypeError: unhashable type: 'MyClass'

这显然是由于set()行。我怎样才能做到这一点? (只要我可以比较两个比较的对象列表,而不管它们的顺序如何,我都不在乎是否使用set。)

1 个答案:

答案 0 :(得分:1)

看看python docs关于什么使类可哈希化。您将需要同时实现__eq____hash__。您需要确保彼此相等的对象也产生相同的哈希值。