Как динамично загрузить класс Python

Вы можете использовать:

b = [form_chr[cnt] for cnt, a in enumerate(form_win) if re.match(r'^1\/', a) is not None]
147
задан user 29 September 2013 в 21:27
поделиться

2 ответа

Из документации 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

вышеупомянутая функция только необходима, если Вы имеете пустой fromlist. Таким образом соответствующий вызов был бы похож на это:

mod = __import__('my_package.my_module', fromlist=['my_class'])
klass = getattr(mod, 'my_class')
181
ответ дан 23 November 2019 в 22:33
поделиться
module = __import__("my_package/my_module")
the_class = getattr(module, "MyClass")
obj = the_class()
-2
ответ дан 23 November 2019 в 22:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: