我正在编写脚本(main_script.py),它应该从以下目录中找到的某些模块导入类:
main_script.py
module1/
__init__.py
module1.py
__初始化__ .py文件包含以下内容:
from module1.module1 import Module1
The包含一个类Module1。模块2遵循完全相同的体系结构。
module2/
__init__.py
module2.py
main_script.py
应该能够基于某些条件导入类Module1
或Module2
。
在main_script.py内部:
module_list=['module1.module1', 'module2.module2']
for module in module_list:
if some_condition:
mod = __import__(module)
class_ = getattr(mod, module.split(".")[1])
setattr(self, m1, class_)
我发现它只导入模块,而不是类。有没有人能带我走上正轨?
发布于 2018-06-03 18:48:43
我解决了这个问题:
1)我采用了eqperes的注释并使用了importlib。2)我意识到在设置属性之前,我必须创建一个类的实例。所以我补充道:
module_list = ['module1.module1', 'module2.module2']
for module in module_list:
if some_condition:
mod = importlib.import_module(module)
# Don't forget to capitalize the name of the class!
class_ = getattr(mod, module.split(".")[1].capitalize())
# Don't forget to make an instance of the class!!
c=class_()
setattr(self, m1, c)
发布于 2018-05-31 19:15:32
你可以这样做:
_temp = __import__('foo.bar', globals(), locals(), ['object'], -1)
object = _temp.object
另请参阅python docs
发布于 2018-05-31 19:20:24
您应该避免使用__import__
,而应使用importlib:
import importlib
module_list = ['module1.module1', 'module2.module2']
for module in module_list:
if some_condition:
mod = importlib.import_module(module)
class_ = getattr(mod, module.split(".")[1].capitalize())
# Don't forget to capitalize the name of the class!
setattr(self, m1, class_)
https://stackoverflow.com/questions/50622903
复制相似问题