【问题标题】:Comparing user-defined objects in two lists [duplicate]比较两个列表中的用户定义对象[重复]
【发布时间】:2019-07-29 06:15:54
【问题描述】:

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

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2017-05-06
      • 2013-10-02
      • 1970-01-01
      相关资源
      最近更新 更多