我正在尝试为字符串创建自定义散列函数.我想按重量按字符频率散列字符串.这样hi并且ih会产生相同的哈希值.我可以覆盖__hash__吗?
或者正在创建一个包装类,它包含字符串和覆盖,__hash__并且__eq__是唯一的方法?
您需要具有不同相等语义的派生类型。通常采用的方法是定义相等性如何工作,然后从派生的结构构建哈希方法,因为哈希值必须与相等性一致。那可能是:
import collections
class FrequencyString(str):
@property
def normalized(self):
try:
return self._normalized
except AttributeError:
self._normalized = normalized = ''.join(sorted(collections.Counter(self).elements()))
return normalized
def __eq__(self, other):
return self.normalized == other.normalized
def __hash__(self):
return hash(self.normalized)
Run Code Online (Sandbox Code Playgroud)