You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于条件定义三类相似类,如何避免代码重复?

多场景类的代码复用方案

问题描述

现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:05:29