Как импортировать разные классы на основе выбранной конфигурации в Python? - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть файл конфигурации Config.py с одним классом Config. Этот класс имеет одну переменную, которую нужно установить, например, модель (модель = 1 или модель = 2). Если модель = 1, я хотел бы импортировать соответствующие классы из папки model1 (например, model1 / X.py). То же самое для model = 2, но из flder model2 (model2 / X.py).

Код структурирован так:

lib/
  Main.py
  Config.py
  model1/
    X.py
  model2/
    X.py

Main.py: основной класс, с которого нужно начинать , Мы импортируем Config.py как

from Config import Config

if Config.model ==1: from model1.X import X
elif Config.model ==2: from model2.X import X

Решение, используемое в Main.py, работает, но я ищу более эффективное решение, особенно если у меня много разных классов. Таким образом, скучно добавлять условие поверх каждого файла python. Кроме того, я мог бы расширить код, добавив model3, model4, et c. Есть ли какой-нибудь простой способ реализовать мой dea, не имея условий для каждого файла?.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

вы можете использовать импорт dunder

model = __import__(modelname)

. Сохраняет импортированную модель в переменной модели для дальнейшего использования. имя модели должно быть правильным именем библиотеки или импортируемого файла / папки

0 голосов
/ 04 февраля 2020

Вы можете использовать importlib для Dynami c Import

from importlib import import_module
from Config import Config
model_name = 'model' + str(Config.model) + '.X'

X = getattr(import_module(model_name), 'X')

Я бы посоветовал против этого. Иногда подробное решение лучше. Явное лучше, чем неявное.

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