我使用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}
而不是空字典。但是,在实际示例中,我有一个我想要加载的整个模块。一个明显的语法是:
foo = {}
eval('from BarModule import *', foo)
execfile(filename, foo)
但是,我已经在我的顶级文件中导入了BarModule
,因此我似乎应该能够直接将foo
定义为{{1}定义的事物集合},无需经历BarModule
和eval
链。
有没有一种简单的惯用方法呢?
答案 0 :(得分:8)
也许您可以使用模块定义的__dict__
。
>>> import os
>>> str = 'getcwd()'
>>> eval(str,os.__dict__)
答案 1 :(得分:6)
使用内置vars()
函数将对象(例如模块)的属性作为字典获取。
答案 2 :(得分:1)
典型的解决方案是使用getattr:
>>> s = 'getcwd'
>>> getattr(os, s)()