如何动态导入类并实例化对象?

2 投票
2 回答
792 浏览
提问于 2025-04-17 05:22

我知道我们可以用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()

撰写回答