繁体   English   中英

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

[英]Dynamically import class by name from module imported as:

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

我需要动态创建对象,并使用来自不同文件中类的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.Onemf.Two等。

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

我知道我一定会错过一些非常明显的东西,只是现在对我而言并不明显。 谢谢

尝试使用以下语法:

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

几乎可以肯定,您的问题有更好的解决方案,但是您的示例如此简短且人为设计,以至于很难给出好的建议。

要解决您提出的特定问题,可以使用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)
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM