[英]Dynamic instantiation from string name of a class in dynamically imported module?
[英]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.One
, mf.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.