关于python:比较两个列表中的用户定义对象

Comparing user-defined objects in two lists

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
obj1 = MyClass(a = 2)
obj2 = MyClass(a = 2)

obj1 == obj2 # gives me True

现在我的问题是我有两个列表,包括这个类的对象,我想比较这两个列表中的set是否相同。我希望:

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

set(list1) == set(list2)

给了我一个(3)。但我遇到了这个错误:

1
TypeError: unhashable type: 'MyClass'

这显然是因为set()线。我该怎么做?(我不在乎使用或不使用set,只要我可以比较两个对象列表,而不管它们的顺序如何。)


请看一下python文档,了解是什么使类具有散列性。您将需要同时实现__eq____hash__。您需要确保彼此相等的对象也产生相同的哈希值。