首页 > 解决方案 > 比较两个列表中的用户定义对象

问题描述

我有一个类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,只要我可以比较两个比较的对象列表,无论它们的顺序如何。)

标签: pythonpython-3.x

解决方案


查看有关什么使类可散列的python 文档。您将需要同时实现__eq____hash__。您需要确保彼此相等的对象也产生相同的哈希值。


推荐阅读