我正在编写脚本(main_script.py),它应该从以下目录中的某些模块中导入类:
main_script.py
module1/
__init__.py
module1.py
__ init __ .py文件包含以下内容:
from module1.module1 import Module1
module1.py包含一个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_)
我发现代替类,它只导入模块。有人能让我走上正轨吗?
答案 0 :(得分:0)
你可以这样做:
_temp = __import__('foo.bar', globals(), locals(), ['object'], -1)
object = _temp.object
答案 1 :(得分:0)
您应该避免使用__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_)
答案 2 :(得分:0)
我解决了它:
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)