在python文档中,这是您想要的功能:
def my_import(name):
components = name.split('.')
mod = __import__(components[0])
for comp in components[1:]:
mod = getattr(mod, comp)
return mod
一个简单的方法__import__
不起作用的原因是,任何超出包字符串中第一个点的导入都是您要导入的模块的属性。因此,这样的事情将无法工作:
__import__('foo.bar.baz.qux')
my_import('foo.bar.baz.qux')
或以您的示例为例:
klass = my_import('my_package.my_module.my_class')
some_object = klass()
:我对此有些反对。您基本上想做的是这样的:
from my_package.my_module import my_class
仅当您的发件人列表为 空时, 才需要上述功能。因此,适当的调用将如下所示:
mod = __import__('my_package.my_module', fromlist=['my_class'])
klass = getattr(mod, 'my_class')