我有一个 config.cfg,我使用 python 模块 ConfigParser 对其进行解析。在一节中,我想配置表单的分配fileextension : ClassName。在以下字典中解析结果:
types = {
"extension1" : "ClassName1",
"extension2" : "ClassName2"
}
Run Code Online (Sandbox Code Playgroud)
编辑:我知道我现在可以这样做:
class_ = eval(types[extension])
foo = class()
Run Code Online (Sandbox Code Playgroud)
但我明白这eval是邪恶的,不应该被使用。
您知道动态配置哪个文件扩展名导致哪个类的更好方法吗?
您可以使用eval, 如果配置文件中的类名与您的 Python 代码中的类名完全匹配(并且类在范围内!),但是 ..... eval 是邪恶的(巧合的是只有一个字母差异? 我想不是!)
一个更安全的方法是添加一个额外的字典,从配置类名映射到 python 类名。我这样做是因为:
eval所以它看起来像:
mappingDict = {"ClassName1" : MyPythonClass1,
"ClassName2" : MyPythonClass2, ... }
# keys are strings, values are classes
Run Code Online (Sandbox Code Playgroud)
然后使用配置文件中的值执行查找:
myClassName = types['extension1']
myClass = mappingDict[myClassName]
Run Code Online (Sandbox Code Playgroud)