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

Python中如何用工厂模式同时触发同签名不同实现的函数?

解决方案

先修正你代码里的语法错误(比如@abstactmethod拼写错误,抽象类需继承ABC),再通过让工厂类统一管理所有子类实例的方式,实现单次调用触发多个子类方法执行的需求:

from abc import ABC, abstractmethod

class Factory(ABC):
    @abstractmethod
    def func1(self, param1):
        pass

    # 类方法:获取所有子类的实例
    @classmethod
    def get_all_subclass_instances(cls):
        return [subclass() for subclass in cls.__subclasses__()]

    # 类方法:批量调用所有子类的func1,生成预期格式输出
    @classmethod
    def batch_call_func1(cls, param1):
        output_parts = []
        for instance in cls.get_all_subclass_instances():
            output_parts.append(instance.func1(param1))
        print(' '.join(output_parts))

class A(Factory):
    def func1(self, param1):
        return f"{param1} class A"
    def func_A(self):
        print("Func A")

class B(Factory):
    def func1(self, param1):
        return f"{param1} class B"
    def func_B(self):
        print("Func B")

# 单次调用实现需求
Factory.batch_call_func1("param1")  # 输出:param1 class A param1 class B

关键说明:

  • 将原代码中print改为返回字符串,方便拼接成你需要的连续输出格式;如果坚持保留print,可以让子类func1直接打印,同时用end=' '控制输出不换行,batch_call_func1只需遍历调用即可。
  • Factory.__subclasses__()会自动获取所有直接继承自Factory的子类,后续新增子类(比如C类)时,无需修改批量调用逻辑,自动支持扩展。
  • 通过类方法batch_call_func1提供统一调用入口,完全符合你“通过Factory接口单次调用触发多子类方法”的要求。

如果不想修改子类func1的实现逻辑,可改用以下版本:

from abc import ABC, abstractmethod

class Factory(ABC):
    @abstractmethod
    def func1(self, param1):
        pass

    @classmethod
    def batch_call_func1(cls, param1):
        for subclass in cls.__subclasses__():
            subclass().func1(param1)

class A(Factory):
    def func1(self, param1):
        print(param1 + " class A", end=' ')
    def func_A(self):
        print("Func A")

class B(Factory):
    def func1(self, param1):
        print(param1 + " class B", end=' ')
    def func_B(self):
        print("Func B")

Factory.batch_call_func1("param1")  # 输出:param1 class A param1 class B 

补充说明:

这个实现本质是工厂模式结合迭代器思想,通过工厂类统一管理所有子类实例,对外提供单一调用入口,避免手动逐个实例化子类并调用方法的繁琐操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:08:19