带有if情况的Python哈希

时间:2018-12-15 10:53:15

标签: python hash set hashtable

我对Python的 hash (自我)函数有疑问。

所以在我的方法中,我有以下代码段

def __init__(self, upper1, lower1, upper2, lower2):
    self.phase = 1
    self.gammas = frozenset()
    self.gammabars = frozenset()

def __hash__(self):
    if self.gammas:
        return hash(self.gammas)
    elif self.gammabars:
        return hash(self.gammabars)

所以我想说:

如果self.gammas不为空,则返回self.gammas或self.gammabars等的哈希值。

但是,如果我现在启动程序,我将得到:

TypeError: __hash__ method should return an integer

那么你知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

致电hash(instance)时,self.gammasself.gammabars都不能为True。您可以尝试添加其他情况:

def __hash__(self):
    if self.gammas:
        return hash(self.gammas)
    elif self.gammabars:
        return hash(self.gammabars)
    else:
        return hash(something)
        # or
        raise ValueError('gammas and gammabars are not valid.')

或调试代码以确认self.gammasself.gammabars的值。

答案 1 :(得分:1)

使用元组方法的哈希值:

return hash((self.gammas, self.gammabar))