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

重写方法一致但基类不同,如何优化重复的派生类实现?

消除Mock类重复代码的简洁写法

首选方案:用Mixin类复用公共逻辑

把两个Mock类里重复的__init__和my_func抽出来做成一个Mixin类,让Mock1、Mock2分别继承这个Mixin和对应的基类即可,完全不需要动态切换继承关系。

示例代码

class Base:
    # 原有定义省略
    def my_func(self, for_val):
        # 基类原实现
        pass

class Derived(Base):
    # 原有定义省略
    pass

# 抽取公共逻辑到Mixin类(仅用于代码复用,不单独实例化)
class MockMixin:
    def __init__(self, input, args):
        self._input = input
        super().__init__(args)  # 自动根据MRO调用下一个类的构造方法

    def my_func(self, for_val):
        # 这里写两个Mock类原本重复的my_func实现
        # definition omitted
        pass

# 定义Mock类,继承顺序Mixin在前,目标基类在后
class Mock1(MockMixin, Base):
    pass

class Mock2(MockMixin, Derived):
    pass

为什么这么做可行?

  • Mixin是Python里专门用来复用代码的模式,通过多继承让公共逻辑被多个类共享。
  • Python的方法解析顺序(MRO)会优先调用Mixin里的方法,刚好覆盖Base中的my_func,符合需求。
  • 用无参数的super()不用硬编码类名,后续修改基类时不需要改动Mixin的代码。

备选方案:类工厂函数

如果不想用多继承,可以写一个工厂函数,动态生成继承指定基类的Mock类:

def create_mock(base_class):
    class GeneratedMock(base_class):
        def __init__(self, input, args):
            self._input = input
            super().__init__(args)
        
        def my_func(self, for_val):
            # 统一的my_func实现
            # definition omitted
            pass
    return GeneratedMock

# 创建需要的Mock类
Mock1 = create_mock(Base)
Mock2 = create_mock(Derived)

这种方式通过函数封装重复逻辑,动态生成类,同样能避免代码重复,适合偏好单继承风格的场景。

内容的提问来源于stack exchange,提问作者roulette01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:52:35