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

如何在带条件的多继承中避免使用Dummy类

重构方案:移除Dummy类的动态多继承实现

原代码里的Dummy类只是用来在条件不满足时占位,完全可以通过动态构建父类列表的方式彻底移除它们,同时保持原有继承逻辑和方法解析顺序(MRO)不变:

from configuration.global_vars import IS_JENKINS_JOB, IS_TEST, IS_DOCKER, IS_TLF
from .base_runner import BaseRunner
from .base_runner_DOCKER import BaseRunnerDOCKER
from .base_runner_JENKINS import BaseRunnerJENKINS
from .base_runner_PROD import BaseRunnerPROD
from .base_runner_TEST import BaseRunnerTEST
from .base_runner_TLF import BaseRunnerTLF

# 动态构建父类列表,只包含满足条件的类
parent_classes = []
if IS_JENKINS_JOB:
    parent_classes.append(BaseRunnerJENKINS)
if IS_DOCKER:
    parent_classes.append(BaseRunnerDOCKER)
if IS_TLF:
    parent_classes.append(BaseRunnerTLF)

# 添加TEST/PROD分支的父类,与原逻辑一致
parent_classes.append(BaseRunnerTEST if IS_TEST else BaseRunnerPROD)
# 最后添加基础父类BaseRunner
parent_classes.append(BaseRunner)

# 用动态生成的父类列表定义CombinedBase
class CombinedBase(*parent_classes):
    pass

方案说明

  1. 逻辑等价:原代码中的Dummy类是空类,不影响继承行为;重构后直接跳过不满足条件的类,父类列表仅包含需要的实现类,MRO顺序和原代码完全匹配(满足条件的类按JENKINS→DOCKER→TLF的顺序,接着是TEST/PROD分支,最后是BaseRunner)。
  2. 代码精简:移除了冗余的Dummy类定义,条件判断更直观,后续维护时能快速识别哪些类会被继承。
  3. 扩展性强:如果后续新增环境分支,只需在parent_classes中添加对应的条件判断即可,无需再创建新的Dummy类。

可选进阶实现

如果需要在运行时动态调整类属性,也可以用type()函数直接创建类:

CombinedBase = type(
    "CombinedBase",
    tuple(parent_classes),
    {}  # 可在这里添加类属性/方法
)

效果和直接定义类完全一致,适合更灵活的动态类构建场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:45:46