基于条件定义三类相似类,如何避免代码重复?
多场景类的代码复用方案
问题描述
现有Case1、Case2、Case3三种场景,需根据对应条件定义三个类。这些类的方法逻辑基本一致,仅预处理步骤因场景不同存在差异,如何实现代码复用,避免重复编写大量相同代码?
用户提供的示例代码:
match condition: case "Case1": class Class1: def method(self): do something to self return self case "Case2": class Class2: def method(self): preprocessing1 on self do exact something as in case 1 return self case "Case3": class Class3: def method(self): preprocessing2 on self do exact something as in case 1 return self
解决方案:基于继承的钩子方法模式
通过定义基础父类封装共同逻辑,将差异化的预处理步骤作为可重写的钩子方法,子类仅需实现各自的预处理逻辑即可,核心代码无需重复编写。
1. 定义基础父类
把三个场景共有的核心逻辑放在父类的method中,预处理步骤抽象为preprocess方法(默认空实现,对应Case1的无预处理场景):
class BaseClass: def preprocess(self): # Case1无需预处理,默认空实现 pass def method(self): # 先执行预处理钩子 self.preprocess() # 这里写三个场景完全相同的核心逻辑 # do exact something as in case 1 return self
2. 实现子类
每个场景对应一个子类,仅重写preprocess方法实现差异化逻辑:
# Case1:直接继承父类,无需修改 class Class1(BaseClass): pass # Case2:重写预处理逻辑 class Class2(BaseClass): def preprocess(self): # 执行preprocessing1的逻辑 # preprocessing1 on self pass # Case3:重写预处理逻辑 class Class3(BaseClass): def preprocess(self): # 执行preprocessing2的逻辑 # preprocessing2 on self pass
3. 根据条件创建实例
通过匹配条件生成对应类的实例,调用统一的method方法即可:
match condition: case "Case1": obj = Class1() case "Case2": obj = Class2() case "Case3": obj = Class3() # 调用方法,自动执行对应预处理+核心逻辑 result = obj.method()
方案优势
- 核心逻辑仅编写一次,彻底消除重复代码
- 子类只需关注差异化部分,代码结构清晰
- 后续新增场景时,只需新增子类并重写
preprocess,符合开闭原则
内容的提问来源于stack exchange,提问作者junfan02
相关产品推荐
相关产品推荐

