从导入的模块中按名称动态导入类:

时间:2017-10-21 14:02:02

标签: python

我搜索过高低,无法找到合适的解决方案。

我需要使用来自不同文件中的类的for循环动态创建对象并将它们存储在字典中。

为避免名称空间污染,我喜欢导入我的模块:

from my_folder import my_file as mf

循环看起来像这样:

self.my_dict = {} # create empty dictionary

    for F in ('One', 'Two', 'Three', ...):
        object = F(var1, var2)
        self.my_dict[F] = object
object = F(var1, var2)行上的

我需要F引用mf.One,  mf.Two等等。

如何将值F附加到mf,以便将其标记为mf.value-of-F,而不是将其读作mf.F

我知道我必须遗漏一些非常明显的东西,现在对我来说并不明显。 感谢

2 个答案:

答案 0 :(得分:1)

尝试使用这样的语法:

object = mf.__dict__[F](var1, var2)

答案 1 :(得分:1)

对你的问题几乎肯定会有更好的解决方案,但你的例子很短,设计很难给出好的建议。

要解决您提出的具体问题,您可以使用getattr根据字符串从模块中获取函数或类:

for F in ('One', 'Two', 'Three', ...):
    Cls = getattr(mf, F)
    obj = Cls(var1, var2)
    self.my_dict[F] = obj

更简单的方法可能是迭代类本身:

for F in (mf.One, mf.Two, mf.Three):
    obj = F(var1, var2)
    ...