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

Python如何自动检测基类的所有继承子类并批量完成实例调用

自动检测基类所有子类并批量执行的实现方案

核心实现原理

Python所有类都内置了__subclasses__()方法,会返回该类所有直接继承的子类列表,不需要额外做登记维护,完全满足需求。

基础版实现(仅识别直接子类)

直接替换原有主函数中的手动实例化调用部分即可:

if __name__ == "__main__":
    data = getData()
    # 自动遍历所有直接继承BaseProcessing的子类
    for processor_cls in BaseProcessing.__subclasses__():
        # 实例化并执行调用逻辑
        processor = processor_cls(data)
        processor()

进阶版实现(支持识别多层继承的所有后代子类)

如果存在子类再被继承的多层继承场景,可以用递归函数遍历所有后代子类,同时支持跳过未实现核心逻辑的抽象中间类:

def get_all_descendant_subclasses(base_cls):
    subclass_list = []
    for direct_subcls in base_cls.__subclasses__():
        subclass_list.append(direct_subcls)
        # 递归查找子类的子类
        subclass_list.extend(get_all_descendant_subclasses(direct_subcls))
    return subclass_list

if __name__ == "__main__":
    data = getData()
    all_processor_cls = get_all_descendant_subclasses(BaseProcessing)
    for processor_cls in all_processor_cls:
        # 可选判断:跳过没有重写do_algorithm的抽象子类,避免运行时报错
        if processor_cls.do_algorithm is BaseProcessing.do_algorithm:
            continue
        processor = processor_cls(data)
        processor()

注意事项

  • 所有自定义子类必须先被导入到当前运行环境,未被导入的类不会被Python加载,也就不会出现在子类列表中。如果子类分散在不同的py文件中,可以提前手动导入对应模块,或者用importlib批量导入指定目录下的模块。
  • 如果有部分子类不需要被自动执行,可以给子类添加标记属性过滤:
# 给不需要自动执行的子类加标记
class TestOnlyAlgorithm(BaseProcessing):
    _exclude_from_auto_run = True
    def do_algorithm(self):
        print("仅用于测试,不参与批量执行")

# 遍历时增加过滤逻辑
for processor_cls in all_processor_cls:
    if getattr(processor_cls, '_exclude_from_auto_run', False):
        continue
    processor = processor_cls(data)
    processor()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:39:03