Ich verwende ConfigObj in Python mit Template-Stil-Interpolation. Wenn ich mein Konfigurationswörterbuch über ** entpacke, scheint es keine Interpolation zu geben. Ist das ein Feature oder ein Fehler? Irgendwelche netten Workarounds?Warum interpoliert ** kwargs nicht mit 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'
würde ich die zweite Zeile erwarten /test/directory
zu sein. Warum funktioniert Interpolation nicht mit ** kwargs?
Das '' ** Stichwort Argument nur Auspacken für Zuordnungen funktioniert. Wahrscheinlich stellen 'ConfigObj'-Instanzen nicht die vollständige [mapping] (http://docs.python.org/glossary.html#term-mapping) Schnittstelle zur Verfügung. –
ConfigObj * erbt * von dict, also bietet es definitiv die vollständige Mapping-Schnittstelle (und in der Tat hat das ** entpacken * funktioniert * es hat nur die falschen Werte). Ich bin mir nicht sicher, wie "**" Werte hervorbringt, aber es ist offensichtlich, dass die Interpolation umgangen wird. Ich muss etwas experimentieren, um das herauszufinden. – fuzzyman
Gibt es nicht eine gewisse Seltsamkeit, wenn man direkt vom Diktat erbt? http://stackoverflow.com/questions/3387691/python-how-to-perfectly-override-a-dict Ich bin kein Experte in diesem Thema, aber vielleicht benutze ich das [MutableMapping] (http: //docs.python .org/library/collections.html # collections.MutableMapping) oder [DictMixin] (http://docs.python.org/library/userdict.html#UserDict.DictMixin) wäre besser? –