覆盖__hash__函数以仅哈希self .__ class__。当对象用作字典中的键时,__ name__将不起作用

时间:2018-08-18 16:51:05

标签: python class hash override

我有以下问题,最好通过以下示例来说明:

class TestHasher:
    def __hash__(self):
         # return the hash of the name of the class of this instance
         # which is "TstHasher"
        return hash(self.__class__.__name__)

th = TestHasher()
print(hash(th))
print(hash("TestHasher"))
 # prints the same result as hash(th)
 # -> the hash value for th and "TestHasher" are the same, everything worked so far
d = {"TestHasher": "it worked!"}
print(d[th])

最后一行使脚本崩溃,并给了我一个KeyError。

我在这里错过了什么吗?这不行吗?

除了调用已传递密钥的 hash 方法之外,dict查询是否还会添加另一个“过滤器”吗?

编辑:

经过进一步的研究(请参见Duncan关于这个问题的答案:How can Python dict have multiple keys with same hash?),在我看来python认为这是哈希冲突,因此采取了相应的行动。有什么方法可以避免这种情况,以便使用键th和“ TestHasher”调用d返回相同的对象?

0 个答案:

没有答案