我正在尝试从字符串实例化一个对象。具体来说,我正在尝试改变这一点:
from node.mapper import Mapper
mapper = Mapper(file)
mapper.map(src, dst)
变成这样的东西:
with open('C:.../node/mapper.py', 'r') as f:
mapping_script = f.read()
eval(mapping_script)
mapper = Mapper(file)
mapper.map(src, dst)
这个看似奇怪的任务的动机是能够在数据库中存储不同版本的映射脚本,然后根据需要检索/使用它们(强调map()
方法的多态性)。
以上不起作用。出于某种原因,eval()
我SyntaxError: invalid syntax.
不明白这一点,因为它与在第一种情况下导入的文件相同。有什么原因eval()
不能用来定义类吗?
我应该注意,我知道围绕eval()
. 如果有的话,我很想听听其他方法。我能想到的唯一另一件事是获取脚本,将其物理保存到节点包目录中,然后导入它,但这似乎更疯狂。