【发布时间】:2014-04-11 08:17:14
【问题描述】:
我的要求是我有一个标准框架,可以通过 3 个步骤生成 HTML 到 PDF:
1) 从我们的数据库中获取内容并从中创建意义,读取 XML 并覆盖或决定设置等 - pre_processing
2) 使用预处理数据创建 HTML 模板 - render_template
3) 运行一个 HTML to PDF Converted 并取回 PDF。 - invoke_service
现在,有时可能需要不同的 PDF 引擎并且实现可能会发生变化……甚至可能其中一些需要非常严格的数据或专有设置
所以我可能需要 extend 1 、 over-ride 2 、 over-ride 3 并且我想让这个实现可配置并轻松切换。
我正在考虑创建一个基类,然后创建实际上将成为运行时对象的 Foo.py 实现和 Bar.py 实现。我怎样才能用简单的 Python 得到这个?
我能想到的一个可怕的方法是:
#Module Name ServiceHandler
def implementation(imp_name):
try:
from imp_name import imp_class
return imp_class(AbtractClass)
else:
Sorry No Implemenation Found!
class AbstractClass(...)
def __init__
Gets invoked in another object method as
self.ServiceHandler.implementation(read_from_xml)
谁能给我很好的指导来解决这个问题?基本上我想要 Foo(Base) 或 Bar(Base) 这应该就像读取配置并将其映射到那个 .
我目前的模块布局是:
模块.py
- base.py
- foo.py
- bar.py
- unknown.py 应该易于扩展。
【问题讨论】:
标签: python interface dependency-injection plugin-architecture