__hash__ 使用实例作为键时未被调用

__hash__ not being called when using instance as key

我搜索了 SO 并发现了很多关于这个主题的问题,并且我尝试重新创建已接受的答案,但我无法复制显示的输出。

>>> class testFoo(object):
...     def __init__(self,x):
...         self.x = x
...     def __eq__(self, other):
...         return hash(self.x) == other
...     def __hash__(self):
...         return hash(self.x)
...
>>> d = {}
>>> x = testFoo("a")
>>> d[x] = 1
>>> d
{<__main__.testFoo object at 0x7f6d9ccc5550>: 1}
>>> hash(x)
12416037344
>>> hash("a")
12416037344
>>>

当我在上面键入 "d" 时,我希望看到的是键 "a",而不是对象的 repr 字符串。我做错了什么?

那是因为键是对象,你没有覆盖默认值__repr__

您需要将此添加到 testFoo class。

def __repr__(self):
    return self.x