Шаблон стратегии Python: динамический импорт файлов классов - PullRequest
2 голосов
/ 26 июня 2011

Я пытаюсь создать программный пакет, который исправляет произвольные несоответствия данных в одной из моих баз данных.Мой дизайн включает в себя два класса - Problem и Fix.

. Проблемы состоят в том, что запросы SQL хранятся в виде .cfg файлов (например, problem_001.cfg), а исправления хранятся в виде файлов Python (например, * 1007).*).Файл конфигурации запроса содержит ссылку на имя файла Python.Каждый исправитель имеет отдельный класс Fix, который наследуется от базового класса BaseFix.

`-- problems
    |-- problem_100.cfg
    |-- problem_200.cfg
    |-- problem_300.cfg
    `-- ...
`-- fixer
    |-- __init__.py
    |   |-- fixers
    |   |   |-- fix_100.py
    |   |   |-- fix_200.py
    |   |   |-- fix_300.py
    |   |   |-- ...
    |   `-- ...
    `-- ...

Я хотел бы создать экземпляры Problem файлов и снабдить их объектами Fix чистым способом,Есть ли способ сделать это без сохранения всех исправлений в одном файле?

ОБНОВЛЕНИЕ:

Это последний работающий код (спасибо, @ Space_C0wb0y):

    fixer_name='fix_100'
    self.fixer=__import__('fixer.fixers', globals(), locals(), 
                 [fixer_name]).__dict__[fixer_name].Fix() 

1 Ответ

4 голосов
/ 26 июня 2011

Вы можете динамически импортировать модули, используя встроенный __import__, который принимает имя модуля в качестве строкового аргумента (см. здесь ). Модули должны находиться в пути поиска модулей .

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