我有一个想要变成集合的对象列表。我的对象包含一些字段,其中一些是 o.id
和 o.area
。如果这两个字段相同,我希望两个对象相等。即:o1==o2
当且仅当 o1.area==o2.area 和 o1.id==o2.id
。
我尝试重写 __eq__
和 __cmp__
但我收到错误:TypeError: unhashable instance
。
我应该重写什么?
最佳答案
定义 __hash__
方法以根据 id 和 area 字段返回有意义的哈希。例如:
def __hash__(self):
return hash(self.id) ^ hash(self.area)
关于Python:集合如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2532365/