Я использую функцию Python execfile ()
как простой, но гибкий способ обработки файлов конфигурации - в основном, идея такова:
# Evaluate the 'filename' file into the dictionary 'foo'.
foo = {}
execfile(filename, foo)
# Process all 'Bar' items in the dictionary.
for item in foo:
if isinstance(item, Bar):
# process item
Это требует, чтобы моя конфигурация файл имеет доступ к определению класса Bar
. В этом простом примере это тривиально; мы можем просто определить foo = {'Bar': Bar}
, а не пустой dict. Однако в реальном примере у меня есть целый модуль, который я хочу загрузить. Один очевидный синтаксис для этого:
foo = {}
eval('from BarModule import *', foo)
execfile(filename, foo)
Однако я уже импортировал BarModule
в свой файл верхнего уровня, поэтому мне кажется, что я могу просто напрямую определить foo
как набор вещей, определенных BarModule
, без необходимости проходить эту цепочку из eval
и import
.
Есть ли простой идиоматический способ сделать это?