Короче говоря, я хочу назвать формат с произвольно именованными аргументами, которые будут заготовлены для поиска.
'{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__
для объекта, который прошел. Кто-нибудь знает, как обойти это?