Короче говоря, я хочу вызвать формат с произвольно названными аргументами, которые будут предварительно формировать поиск.
'{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['anything']
. Но при передаче в формат(), как показано выше, я получаю:
TypeError: format() argument after ** must be a mapping, not Mapping
Я попытался создать подкласс dict
вместо object
, но теперь вызов format()
, как показано, вызывает KeyError
. Я даже реализовал __contains__
как return True
, но все равно KeyError
.
Таким образом, кажется, что **
не просто вызывает __getitem__
для переданного объекта. Кто-нибудь знает, как это обойти?
**
не мог работать только с__getitem__
. Какие элементы он получит при передаче аргументов функции, которая принимает любые аргументы ключевого слова (**kwargs
)? - person Matti Virkkunen   schedule 22.11.2011'{0[Thing1]} and {0[other_thing]}'.format(my_mapping)
По крайней мере, это работает. - person Aaron McMillin   schedule 22.11.2011