Используйте строку, чтобы указать `из my_package import my_class как my_custom_name` - PullRequest
3 голосов
/ 24 марта 2020

Я хотел бы сделать следующую строку динамической c:

from my_package import my_class as my_custom_name

Я знаю, как динамически импортировать модули через строку

import importlib
module_name = "my_package"
my_module = importlib.import_module(module_name)

, как предложено здесь . Однако он все еще не позволяет мне указать класс, который я хочу импортировать (my_class), и псевдоним, который я хочу присвоить имени класса (my_custom_name). Я использую python 3,6

1 Ответ

2 голосов
/ 24 марта 2020

Два шага. Во-первых, вы можете ссылаться на модуль напрямую, используя importlib:

importlib.import_module('my_package.my_module') # You can use '.'.join((my_package, my_module))

Ваш класс будет содержаться в самом модуле как атрибут, как и при любом импорте. Поэтому просто используйте

my_custom_name = importlib.import_module('my_package.my_module').__dict__['my_class']

или даже лучше

my_custom_name  = getattr(importlib.import_module('my_package.my_module'), 'my_class')
...