我希望编写一个类,可以用作哈希集合(例如在dict
中)的键。我知道用户类默认是可哈希的,但在这里使用id(self)
是错误的。
我的类将一个tuple
作为成员变量。从tuple
派生似乎不是一个选项,因为在我的构造函数中,我没有得到与tuple
构造函数相同类型的参数。但也许这不是一个限制?
我需要的基本上是一个tuple
的哈希值,就像一个真正的tuple
会给出它的哈希值。
hash(self.member_tuple)
就是这样做的。
这里的想法是两个元组可以相等而它们的id
不相等。
如果我按以下方式实现我的__cmp__()
:
def __cmp__(self, other):
return cmp(self, other)
这会自动使用hash(self)
进行比较吗?还是我应该按照以下方式实现:
def __cmp__(self, other):
return cmp(self.member_tuple, other)
我的__hash__()
函数被实现为返回所持有的tuple
的哈希值,即:
def __hash__(self):
return hash(self.member_tuple)
基本上,
__cmp__()
和__hash__()
之间如何交互?我不知道在__cmp__()
中,other
是否已经是哈希值,我是否应该与“我的”哈希值进行比较(这将是所持有的tuple
的哈希值),还是与self
进行比较。那么哪个是正确的呢?
有人能解释一下并可能给我指出文档吗?
tuple
的哈希值是否与成员元组的哈希值相同,对吗? - 0xC0000022L