我需要一种可行的方法来获取从 Python 中的基类继承的所有类。
要获取从基类继承的所有类(包括间接继承的类),可以使用 __subclasses__() 方法,并递归地查找所有子类。以下是详细步骤和示例代码:
__subclasses__()
假设你有一个基类 Base 和一些子类:
Base
class Base: pass class Sub1(Base): pass class Sub2(Base): pass class Sub3(Sub1): pass class Sub4(Sub2): pass
要获取 Base 类的所有子类,包括间接继承的子类,可以使用如下方法:
def get_all_subclasses(cls): subclasses = cls.__subclasses__() all_subclasses = subclasses.copy() for subclass in subclasses: all_subclasses.extend(get_all_subclasses(subclass)) return all_subclasses # 使用方法 base_classes = get_all_subclasses(Base) print(base_classes)
获取直接子类: cls.__subclasses__() 返回直接子类的列表。
cls.__subclasses__()
递归收集: get_all_subclasses() 函数递归地收集所有子类:
get_all_subclasses()
对于每个子类,调用 get_all_subclasses() 来查找其子类,并扩展子类列表。
复制: 使用 subclasses.copy() 来避免在迭代过程中修改列表。
subclasses.copy()
运行上述代码,将会输出所有继承自 Base 类的子类,包括直接和间接的子类:
[<class '__main__.Sub1'>, <class '__main__.Sub3'>, <class '__main__.Sub2'>, <class '__main__.Sub4'>]
这个方法有效地找到所有直接和间接的子类,适用于各种 Python 应用场景。