我正在尝试使用__import__()
导入模块。我需要使用__import__
因为我不知道在运行之前我需要哪个模块。
假设我需要的模块是MyClass
。文件树为api/apps/myapp/my_class.py
,我在my_class.py
中的类为MyClass
。现在,要访问MyClass
的方法,我正在做的是:
my_class_module = __import__('api.apps.myapp.my_class')
my_class= my_class_module.MyClass()
但是我收到了这个错误:
'module' object has no attribute 'MyClass'
有什么想法吗?
答案 0 :(得分:3)
默认情况下,__import__
会返回对第一个模块的引用。在您的示例中,它是api
。解决方案是使用fromlist
参数:
my_class_module = __import__('api.apps.myapp.my_class', fromlist=[''])
来自__import__
文档:
[...] 从包中导入模块时,请注意 ___ import ___('A.B',...) 当fromlist为空时返回包A,但其子模块B何时返回 fromlist不是空的。 [...]
有关其原因的详细信息,请参阅Why does Python's __import__ require fromlist?