Estoy usando ConfigObj en python con interpolación de estilo de plantilla. Desenredar mi diccionario de configuración a través de ** no parece hacer interpolación. ¿Es esta una característica o un error? ¿Alguna buena solución?¿Por qué ** kwargs no interpola con Python ConfigObj?
$ cat my.conf
foo = /test
bar = $foo/directory
>>> import configobj
>>> config = configobj.ConfigObj('my.conf', interpolation='Template')
>>> config['bar']
'/test/directory'
>>> '{bar}'.format(**config)
'$foo/directory'
yo esperaría que la segunda línea para ser /test/directory
. ¿Por qué la interpolación no funciona con ** kwargs?
El '' ** argumento de palabra clave desembalaje sólo funciona para las asignaciones. Lo más probable es que las instancias 'ConfigObj' no expongan la interfaz completa [mapeo] (http://docs.python.org/glossary.html#term-mapping). –
ConfigObj * hereda * de dict, por lo que definitivamente proporciona la interfaz de mapeo completa (y de hecho el ** desempaquetar * ha funcionado * acaba de obtener los valores incorrectos). No estoy seguro de cómo "**" "obtiene los valores, sin embargo, obviamente se está pasando por alto la interpolación. Tendré que hacer algunos experimentos para resolver. – fuzzyman
¿No hay alguna rareza asociada con heredar directamente de dict? , http://stackoverflow.com/questions/3387691/python-how-to-perfectly-override-a-dict. No soy un experto en esto, pero quizás usando el [MutableMapping] (http: //docs.python .org/library/collections.html # collections.MutableMapping) o [DictMixin] (http://docs.python.org/library/userdict.html#UserDict.DictMixin) sería mejor? –