簡単に言えば、ルックアップを実行する任意の名前の引数を使用してformatを呼び出したいと思います。
'{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']
ます。しかし、上記のようにformat()に渡されると、次のようになります。
TypeError: format() argument after ** must be a mapping, not Mapping
dict
の代わりにサブクラス化を試みましたが、次に示すようにobject
呼び出すと、が発生します。私もとして実装しましたが、それでも。format()
KeyError
__contains__
return True
KeyError
つまり、渡されたオブジェクトを**
呼び出すだけではないよう__getitem__
です。これを回避する方法を知っている人はいますか?