如何动态导入类并实例化对象?
我知道我们可以用exec这个命令来动态加载一个模块(从字符串中)。
比如:
path = 'A.B'
class = 'C'
exec( "from %s import %s" %(path, class) )
但是我该怎么把它实例化成一个对象c呢?顺便问一下,上面这种从字符串加载模块的方法是最好的选择吗?看起来不是很安全。谢谢!
祝好,
约翰
2 个回答
1
import importlib
m = importlib.import_module('A.B')
C = getattr(m, 'C')
c = C()
如果你使用的是较低版本的Python,比如2.7,你可以从标准库中找到importlib,虽然这样做可能有点奇怪。
4
对于Python版本小于等于2.6,你可以使用内置的 __import__
函数:
m = __import__('A.B', globals(), locals(), ['C'])
C = getattr(m, 'C')
c = C()