我更熟悉從子類中的超類構建複雜/組合哈希碼的「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