2017-01-16 79 views
1

我有'my_class'类放在'my_module'。我需要导入这个功能。我试着这样做:从模块动态导入类

import importlib 
result = importlib.import_module('my_module.my_class') 

但它说:

ImportError: No module named 'my_module.my_class'; 'my_module' is not a package 

所以。正如我可以看到它只适用于模块,但无法处理类。我怎样才能做到这一点?

回答

3

期待my_module是一个包含名为'my_class'的模块的包。如果您需要导入类,或者更一般地,一个属性动态,只需使用getattr导入模块后:

cls = getattr(import_module('my_module'), 'my_class') 

而且,是的,它只能使用模块。请记住importlib.import_module是内部importlib.__import__函数的包装。它不提供与完整的import语句相同数量的功能,该语句与from一起在导入的模块上执行属性查找。