我的json商店返回我的类实例的序列化数据,但也返回要膨胀的对象的类名。
由于此逻辑位于Baseclass
成员中,并且加载的类名继承自Baseclass
,我相信在Baseclass
文件中全部导入它们都不是一个选项(循环导入) )也不是好的风格(DIP原则)。
因此,我的代码看起来像这样:
class_str = class_from_db
try:
exec 'from models import ' + class_str
globals()[class_str].load_from_data(other_data_from_db)
except:
raise SomeException()
我认为它应该可以工作,但对我来说它看起来并不是那么pythonic。这种方法有什么问题吗?表演等?还有更好的方法吗?
(也许值得补充的是,没有太多的子类,所以将它们加载到一个好的地方本身并不是问题。)
编辑:感谢exec提示。这很有效,但主要是我对整个结构是否有意义并且是pythonic感兴趣,或者是否有更好的方法来解决它。
答案 0 :(得分:0)
如果您只是想根据字符串导入类,可以使用__import__
内置函数:
>>> __import__('math')
>>> <module 'math' (built-in)>
或者,如果要执行更复杂的动态导入操作,可以参考imp
模块。
在任何一种情况下,我强烈建议不要使用exec
或eval
- 这几乎总是更好的方法。