【发布时间】:2016-02-05 22:31:35
【问题描述】:
我正在尝试从字符串实例化一个对象。具体来说,我正在尝试改变这一点:
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() 的安全问题。如果有的话,我很想听听其他方法。我能想到的唯一另一件事是获取脚本,将其物理保存到节点包目录中,然后导入它,但这似乎更疯狂。
【问题讨论】:
标签: python object objectinstantiation