3

我正在尝试使用__import__(). 我需要使用,__import__因为我不知道在运行之前我需要哪个模块。

假设我需要的模块是MyClass. 文件树是api/apps/myapp/my_class.py,我所在的类my_class.pyMyClass. 现在,要访问MyClass我正在做的方法是这样的:

my_class_module =  __import__('api.apps.myapp.my_class')
my_class= my_class_module.MyClass()

但我收到了这个错误: 'module' object has no attribute 'MyClass'

有任何想法吗?

4

1 回答 1

3

默认情况下,__import__返回对第一个模块的引用。在您的示例中,它是api. 解决方法是使用fromlist参数:

my_class_module =  __import__('api.apps.myapp.my_class', fromlist=[''])

__import__文档中:

[...] 从包中导入模块时,请注意___import___('AB', ...) 在 fromlist 为空时返回包 A,但在 fromlist 不为空时返回其子模块B。[...]

有关这样做的原因的详细信息,请参阅为什么 Python 的 __import__ 需要 fromlist?

于 2013-10-07T09:19:50.970 回答