我正在尝试使用 __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()
但是我收到了这个错误:
“模块”对象没有属性“MyClass”
有什么想法吗?
最佳答案
默认情况下,__import__
返回对第一个 模块的引用。在您的示例中,它是 api
。解决方法是使用fromlist
参数:
my_class_module = __import__('api.apps.myapp.my_class', fromlist=[''])
来自 __import__
文档:
[...] 从包中导入模块时,请注意 ___import___('A.B', ...) 当 fromlist 为空时返回包 A,但当 fromlist 不为空。 [...]
有关它这样做的原因的详细信息,请参阅 Why does Python's __import__ require fromlist?
关于python - 在运行时导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19220755/