Не знаю, почему этот код работает (используйте альтернативный класс словаря с методом __missing__)
Этот вопрос возникает, когда я читаю книгу Дэвида Бизли "Поваренная книга Питона" на странице 61, 62. Я резюмирую:
>>> s = '{name} has {n} messages.'
>>> name = 'Guido'
>>> n = 37
Теперь, если вы просто хотите заменить {имя}, но не хотите заменить {n}, определите альтернативный класс словаря с помощью __missing__()
метод
>>> 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__()
способ заставить этот код работать?
1 ответ
Решение
format_map()
будет искать в качестве аргумента ключ 'n'
, Поскольку этот ключ отсутствует, это подняло бы KeyError
в нормальном dict
, Определение __missing__
Метод определяет, что здесь происходит вместо: '{n}'
возвращается, чтобы отформатированная строка осталась прежней.