不知道为什么这段代码有效(使用替代字典 class 和 __missing__ 方法)

Don't know why this code works (use alternative dictionary class with __missing__ method)

当我阅读 David Beazley, Brian K. Jones 的书 "Python cookbook",第 61、62 页时出现了这个问题。我总结:

>>> s = '{name} has {n} messages.'
>>> name = 'Guido'
>>> n = 37

现在,如果只想替换 {name},但不想替换 {n},请使用 __missing__() 方法定义替代字典 class

>>> class safesub(dict):
        def __missing__(self, key):
            return '{' + key + '}'

然后

>>> del n     # Make sure n is undefined
>>> s.format_map(safesub(vars()))

你得到了想要的结果:

'Guido has {n} messages.'

我的问题: 为什么需要 __missing__() 方法来使此代码工作?

format_map() 将在其参数中查找键 'n'。因为此密钥 缺失 ,它会在正常 dict 中引发 KeyError。定义 __missing__ 方法决定了这里会发生什么:返回 '{n}' 以便格式化的字符串保持不变。