Python策略模式:动态导入类文件

时间:2011-06-26 14:47:09

标签: python strategy-pattern python-import

我正在尝试构建一个软件包,修复我的某个数据库中的任意数据不一致问题。我的设计包括两个类 - ProblemFix

问题是存储为.cfg个文件的SQL查询(例如problem_001.cfg),修复程序存储为Python文件(例如fix_001.py)。查询配置文件具有对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 个答案:

答案 0 :(得分:4)

您可以使用内置__import__动态导入模块,它将模块名称作为字符串参数(请参阅here)。模块必须位于module search path