我更熟悉从子类中的超类构建复杂/组合哈希码的“Java方式”。 Python 3中有更好的/不同的/首选的方式吗? (我无法找到通过谷歌这件事具体到Python3什么。)如何在Python3中结合散列码?
class Superclass:
def __init__(self, data):
self.__data = data
def __hash__(self):
return hash(self.__data)
class Subclass(Superclass):
def __init__(self, data, more_data):
super().__init__(data)
self.__more_data = more_data
def __hash__(self):
# Just a guess...
return hash(super()) + 31 * hash(self.__more_data)
简化这个问题,请假设self.__data
和self.__more_data
简单,哈希的数据,如str
或int
。
伟大的答案。感谢您的参考。回复:“截断” - 这是由于Python的不受限制的整数值? *整数具有无限的精度*(大多数人对Python的学习感到惊讶!) – kevinarpe 2015-04-04 09:17:04
我意识到整数具有无限精度。但是,'hash()'不具有无限精度。它的实现是返回一个最可能为8个字节的“Py_ssize_t”,所以它会返回'__hash__' mod 2^64-1的结果。 – 2015-04-04 09:22:06
这是一个合理的实现:'return super().__ hash __()^ hash(self .__ more_data)'? – kevinarpe 2015-04-04 10:30:30