我对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
那么你知道如何解决这个问题吗?
答案 0 :(得分:3)
致电hash(instance)
时,self.gammas
或self.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.gammas
和self.gammabars
的值。
答案 1 :(得分:1)
使用元组方法的哈希值:
return hash((self.gammas, self.gammabar))