python导入取决于后端数据

时间:2015-10-23 14:46:57

标签: python import inflate globals

我的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感兴趣,或者是否有更好的方法来解决它。

1 个答案:

答案 0 :(得分:0)

如果您只是想根据字符串导入类,可以使用__import__内置函数:

>>> __import__('math')
>>> <module 'math' (built-in)>

或者,如果要执行更复杂的动态导入操作,可以参考imp模块。

在任何一种情况下,我强烈建议不要使用execeval - 这几乎总是更好的方法。