Как импортировать класс на лету и создать его как объект? - PullRequest
2 голосов
/ 01 ноября 2011

Я знаю, что мы могли бы использовать exec для загрузки модуля (из строки) на лету

например,

path  = 'A.B'
class = 'C'
exec( "from %s import %s" %(path, class) )

но как я могу создать его экземпляр как объект c?Кстати, это лучший способ загрузить модуль из строки?это выглядит не очень безопасно.спасибо

привет, Джон

Ответы [ 2 ]

4 голосов
/ 01 ноября 2011

Для python <= 2.6 вы можете использовать встроенную функцию <a href="http://docs.python.org/library/functions.html#__import__" rel="nofollow">__import__:

m = __import__('A.B', globals(), locals(), ['C'])
C = getattr(m, 'C')
c = C()
1 голос
/ 01 ноября 2011
import importlib
m = importlib.import_module('A.B')
C = getattr(m, 'C')
c = C()

По какой-то странной причине вы можете получить importlib из стандартной библиотеки 2.7, если у вас более низкая версия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...