__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
我搜索了 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