Python中如何获取父类的所有叶子子类?
如何找出基类的所有叶子子类
要找出ParentClass的所有叶子子类(即没有被其他类继承的子类),可以通过以下步骤实现:
核心思路
- 收集所有后代子类:递归获取
ParentClass的所有直接和间接子类。 - 筛选叶子节点:判断每个子类是否被其他子类继承,未被继承的即为叶子子类。
实现代码
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
相关产品推荐
相关产品推荐

