
本文介绍一种基于继承和运行时条件判断的设计模式,帮助你在不同业务场景(如 case1/case2/case3)下复用核心逻辑,避免重复定义几乎相同的类和方法。
本文介绍一种基于继承和运行时条件判断的设计模式,帮助你在不同业务场景(如 case1/case2/case3)下复用核心逻辑,避免重复定义几乎相同的类和方法。
在实际开发中,我们常遇到这样一类需求:多个业务分支(如 "Case1"、"Case2"、"Case3")需要各自对应的类,这些类的主体行为高度一致,仅在前置预处理步骤上存在差异。若为每个 case 单独定义完整类,将导致大量冗余代码,违反 DRY(Don’t Repeat Yourself)原则,也增加维护成本。
推荐方案:基类 + 条件化子类动态构造
核心思路是——提取共性为基类,差异化逻辑由子类覆盖,并通过条件分支按需创建具体类。这比重复写三个类更简洁、可扩展性更强。
✅ 示例实现如下:
# 1. 定义统一基类(封装公共逻辑)
class BaseProcessor:
def method(self):
# 这里是所有 case 共享的核心操作
print("Executing common logic on", self)
# do something to self
return self
# 2. 根据 condition 动态选择并定义子类(可选:使用工厂函数封装)
condition = "Case2" # 可来自配置、参数或运行时判断
if condition == "Case1":
ProcessorClass = BaseProcessor # 直接复用基类,无需额外预处理
elif condition == "Case2":
class ProcessorClass(BaseProcessor):
def method(self):
print("Preprocessing 1...")
# preprocessing1 on self
return super().method()
elif condition == "Case3":
class ProcessorClass(BaseProcessor):
def method(self):
print("Preprocessing 2...")
# preprocessing2 on self
return super().method()
else:
raise ValueError(f"Unknown condition: {condition}")
# 3. 使用示例
obj = ProcessorClass()
result = obj.method() # 自动执行对应预处理 + 公共逻辑
? 关键优势说明:
- ✅ 零重复:BaseProcessor.method() 只定义一次,所有子类通过 super().method() 复用;
- ✅ 职责清晰:基类专注核心流程,子类只关注“该 case 特有的预处理”;
- ✅ 灵活可扩展:新增 Case4 只需追加一个 elif 分支,无需修改已有逻辑;
- ✅ 类型友好:ProcessorClass 是真实类对象,支持 IDE 类型推导、isinstance() 判断及静态分析。
⚠️ 注意事项:
- 避免在 method() 中无意义地 return self(除非明确需要链式调用)。Python 中方法默认返回 None,显式返回 self 仅在设计 Fluent Interface 时必要;
- 若需在类定义后仍保持多实例兼容(如不同线程/请求使用不同 case),建议将 ProcessorClass 封装为工厂函数(如 get_processor_class(condition)),而非全局变量;
- 对于更复杂场景(如预处理逻辑本身需参数化),可进一步将预处理器抽象为策略对象注入基类,实现更高阶解耦。
综上,继承不是“过时”的设计,而是解决此类“微差异多变体”问题最直接、最 Pythonic 的方式——它让变化局部化,让稳定部分沉淀为可复用资产。










