我为对象创建了哈希函数。我遇到的问题是我在哈希函数中创建的值不是从函数返回的内容。
class someClass():
def someClass(str1, str2, str3):
self.str1 = str1
self.str2 = str2
self.str3 = str3
...
def __hash__(self):
hash_val = int(sha256((self.str1+ self.str2
+ self.str3).encode('utf-8')).hexdigest(), 16)
# print's 937929098002453100804....
print(hash_val)
return hash_val
...
testClass = someClass('test', 'testClass', 'testCase')
hashKey = hash(testClass)
# print's 377513311013302392
print(hashKey)
因此,当我从哈希()打印时,我得到93792909800245310080479536979750034401273674738852415427366199722413460820022
,
但是当我打印hashkey时,我得到377513311013302392
?为什么呢?
编辑:所以我明确地调用了哈希()并得到了我期待的数字,但是因为我覆盖了哈希(),我不应该从hash()获得相同的值吗?
答案 0 :(得分:2)
来自the docs:
注意hash()将从对象的自定义哈希()方法返回的值截断为Py_ssize_t的大小。这通常是64位构建上的8个字节和32位构建上的4个字节。
93792909800245310080479536979750034401273674738852415427366199722413460820022
超出了这些限制。
试试这个:
class C():
def __hash__(self):
return 93792909800245310080479536979750034401273674738852415427366199722413460820022
a = C()
b = C()
print(hash(a))
print(hash(b))
输出:
377513311013302392
377513311013302392