Python 策略模式:动态导入类文件
我正在尝试创建一个软件包,用来修复我数据库中各种数据不一致的问题。我的设计包含两个类——Problem
(问题)和 Fix
(修复)。
这些问题是以 SQL 查询的形式存储在 .cfg
文件中(比如 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()