Могу ли я использовать динамическое сопоставление для распаковки аргументов ключевых слов в Python?

Короче говоря, я хочу вызвать формат с произвольно названными аргументами, который будет выполнять поиск.

'{Thing1} and {other_thing}'.format(**my_mapping)

Я пробовал реализовать my_mapping следующим образом:

class Mapping(object):
  def __getitem__(self, key):
    return 'Proxied: %s' % key
my_mapping = Mapping()

Что работает должным образом при вызове my_mapping ['что угодно'] . Но при передаче в format (), как показано выше, я получаю:

TypeError: format() argument after ** must be a mapping, not Mapping

Я попытался создать подкласс dict вместо объекта , но теперь вызвал format () , как показано вызывает KeyError . Я даже реализовал __ contains __ как return True , но все же KeyError .

Похоже, что ** не просто вызывает __ getitem __ для переданного объекта. Кто-нибудь знает, как это обойти?

6
задан Aaron McMillin 21 November 2011 в 21:18
поделиться