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

Python中如何调用类所有实例(含继承关系实例)的同名方法

实现方案

Python本身没有内置调用类所有实例同名方法的语法,你可以通过以下两种常用方式实现需求:

方案1:类内部维护实例注册表(无感知自动注册)

在父类中定义类属性存储所有子类实例,实例初始化时自动注册到列表中,同时子类的process方法优先调用父类实现,即可通过单次调用触发所有实例执行对应逻辑:

class Parent:
    # 类级别的实例注册表
    _instances = []

    def __init__(self):
        # 实例初始化时自动注册
        self._instances.append(self)

    def process(self):
        print("Parent process")

    # 批量触发所有注册实例的process方法
    @classmethod
    def process_all(cls):
        for instance in cls._instances:
            instance.process()

    # 如果你需要调用任意实例的process就触发所有,打开下方注释即可
    # def process(self):
    #     self.process_all()

class ChildType1(Parent):
    def __init__(self):
        super().__init__()

    def process(self):
        # 优先调用父类process实现
        super().process()
        print("ChildType1 process")

class ChildType2(Parent):
    def __init__(self):
        super().__init__()

    def process(self):
        super().process()
        print("ChildType2 process")

c = ChildType1()
d = ChildType1()
e = ChildType2()

# 单次调用即可得到你需要的输出
Parent.process_all()

执行后输出为:

Parent process
ChildType1 process
Parent process
ChildType1 process
Parent process
ChildType2 process

注意:该方案需要在实例销毁时手动将其从_instances列表中移除,否则会出现内存泄漏,未被引用的实例无法被GC回收。

方案2:手动维护实例数组(零侵入更灵活)

也就是你提到的类实例数组方案,不需要修改原有类的实现逻辑,自己维护存储所有实例的列表即可:

# 原有类仅需在子类process中添加父类调用
class Parent:
  def __init__(self):
    pass

  def process(self):
    print("Parent process")

class ChildType1(Parent):
  def __init__(self):
    super().__init__()

  def process(self):
    super().process()
    print("ChildType1 process")

class ChildType2(Parent):
  def __init__(self):
    super().__init__()

  def process(self):
    super().process()
    print("ChildType2 process")

c = ChildType1()
d = ChildType1()
e = ChildType2()

# 手动维护所有实例的列表
all_instances = [c, d, e]

# 单次遍历调用即可
for ins in all_instances:
    ins.process()

输出和方案1完全一致,该方案适合实例创建逻辑集中的场景,灵活度更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:45:03