Python如何实例化模块中抽象基类的所有子类并调用方法获取嵌套列表结果
实现方法
你可以直接调用Python内置的__subclasses__()方法获取A的所有直接子类,遍历实例化后调用process方法收集结果即可:
# 获取A的所有直接子类 subclasses = A.__subclasses__() result = [] for cls in subclasses: # 实例化子类 obj = cls() # 调用process方法获取返回列表,追加到最终结果中 sub_result = obj.process() result.append(sub_result)
执行完成后result就是你需要的列表嵌套列表结构。
注意事项
你当前代码中定义的result是类属性,同一个子类的所有实例会共享同一份列表,多次实例化调用会出现数据残留的问题,建议修改为实例属性,示例如下:
class B(A): def __init__(self): self.result = [] def process(self): # 原有业务逻辑 return self.result
C、D类做相同修改即可。
扩展:获取所有层级子类
如果存在继承A子类的间接子类(比如有类继承B,也需要执行对应逻辑),可以用递归方法获取所有层级的子类:
def get_all_subclasses(parent_cls): all_subs = parent_cls.__subclasses__() for sub_cls in all_subs.copy(): all_subs.extend(get_all_subclasses(sub_cls)) return all_subs # 调用函数获取所有层级子类 subclasses = get_all_subclasses(A) # 后续收集结果的逻辑和上述基础实现一致
内容的提问来源于stack exchange,提问作者zara kolagar
相关产品推荐
相关产品推荐

