【发布时间】:2018-05-06 10:57:52
【问题描述】:
学习这个超级简单的课程:
class Foo():
def __init__(self, iden):
self.iden = iden
def __hash__(self):
return hash(self.iden)
def __repr__(self):
return str(self.iden)
目标是创建类的实例以用作字典键。如果省略__repr__,则键是标准对象地址。对于__repr__,可打印的表示可能是:
f = Foo(1)
g = Foo(2)
d = {f:'a', g:'b'}
print(d)
>>> {1:'a', 2:'b'}
当尝试按键访问字典时,如何使用__repr__(或__str__)表示作为键似乎并不明显。
print(d[1])
>>> KeyError
【问题讨论】:
-
究竟如何利用
__str__/__repr__来做what?对象在dict(或set)中的位置仅基于其哈希值。__repr__只影响对象出现的方式,而不影响您引用它的方式。 -
答案是否定的。正如我所说,repr 仅与对象的显示方式 相关,与您如何引用它无关。
-
@glibdud 以上使用
__hash__也失败了。hash(1) == 1,但d[1]因密钥错误而失败。 -
好点。除了散列之外,似乎还考虑了其他东西(可能是类型?)。我看看能不能找到参考资料。
标签: python python-3.x dictionary