Не знаю, почему этот код работает (используйте альтернативный класс словаря с методом __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}' возвращается, чтобы отформатированная строка осталась прежней.

Другие вопросы по тегам