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

Python中如何获取父类的所有叶子子类?

如何找出基类的所有叶子子类

要找出ParentClass的所有叶子子类(即没有被其他类继承的子类),可以通过以下步骤实现:

核心思路

  1. 收集所有后代子类:递归获取ParentClass的所有直接和间接子类。
  2. 筛选叶子节点:判断每个子类是否被其他子类继承,未被继承的即为叶子子类。

实现代码

class ParentClass:
    pass

class SubClass1(ParentClass):
    pass

class SubClass2(ParentClass):
    pass

class SubClass3(ParentClass):
    pass

class SubClass4(SubClass2):
    pass

class SubClass5(SubClass2):
    pass

class SubClass6(SubClass2, SubClass3):
    pass

def get_all_subclasses(cls):
    """递归获取类的所有直接和间接子类"""
    subclasses = cls.__subclasses__()
    for subclass in subclasses:
        subclasses.extend(get_all_subclasses(subclass))
    return subclasses

def get_leaf_subclasses(parent_cls):
    """找出基类的所有叶子子类"""
    all_subclasses = get_all_subclasses(parent_cls)
    # 收集所有被其他子类继承的类(非叶子节点)
    inherited_classes = set()
    for cls in all_subclasses:
        # 检查当前类的基类是否属于已收集的子类
        for base in cls.__bases__:
            if base in all_subclasses:
                inherited_classes.add(base)
    # 筛选出未被继承的子类(叶子节点)
    return [cls for cls in all_subclasses if cls not in inherited_classes]

# 测试调用
result = get_leaf_subclasses(ParentClass)
# 打印类名验证结果
print([cls.__name__ for cls in result])  # 输出: ['SubClass1', 'SubClass4', 'SubClass5', 'SubClass6']

代码说明

  • get_all_subclasses:利用类的__subclasses__()方法获取直接子类,再递归遍历每个子类的子类,最终得到所有后代子类。
  • get_leaf_subclasses:遍历所有子类,找出那些被其他子类作为基类的类(这些类是非叶子节点),剩下的未被继承的子类就是叶子子类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:56:01