我有一个类,它是tuple
. 我想将该类的实例用作 a 的元素set
,但我得到它是不可散列类型的错误。我想这是因为我已经覆盖了__eq__
and__ne__
方法。我应该怎么做才能恢复我的类型的哈希性?我正在使用 Python 3.2。
问问题
415 次
2 回答
3
比较相等的对象应该具有相同的哈希值
因此,将哈希基于您用来比较相等性的属性是一个好主意
阿德里安的例子会更好这样
class test(tuple):
def __eq__(self,comp):
return self[0] == comp[0]
def __ne__(self,comp):
return self[0] != comp[0]
def __hash__(self):
return hash((self[0],))
简单地利用包含我们关心的东西的元组的哈希值来实现平等
于 2012-10-06T10:47:03.297 回答
2
您需要将您的类型设为可散列,这意味着__hash__()
在您的类中实现从元组派生的成员函数。
例如:
class test(tuple):
def __eq__(self,comp):
return self[0] == comp[0]
def __ne__(self,comp):
return self[0] != comp[0]
def __hash__(self):
return hash(self[0])
这就是现在的样子:
>>> set([test([1,]),test([2,]),test([3,])])
{(1,), (2,), (3,)}
>>> hash(test([1,]))
1
注意:您绝对应该阅读该__hash__()
函数的文档,以了解比较运算符和哈希计算之间的关系。
于 2012-10-06T09:48:03.617 回答