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

如何创建可执行其他类所有方法的Python类?代码无输出排查

问题分析与代码修复

原代码无法正常运行的核心问题有三个:

  1. run_all方法中使用return,导致循环仅执行第一个方法就终止,后续方法无法运行。
  2. 判断魔法方法的逻辑错误:试图对方法对象调用字符串方法startswith,这会引发错误,但因为return的存在,该行代码从未执行,所以没有报错。
  3. 未过滤魔法方法,会收集到__init__、__str__等不需要主动调用的内置方法。

修正后的代码

class RunAll:
    def __init__(self, instance):
        self.methods = []
        self.instance = instance  # 改名更清晰,传入的是类实例而非类本身

    def get_methods(self):
        for attr_name in dir(self.instance):
            # 过滤以__开头和结尾的魔法方法
            if attr_name.startswith('__') and attr_name.endswith('__'):
                continue
            attr = getattr(self.instance, attr_name)
            # 仅收集可调用的方法(排除实例属性)
            if callable(attr):
                self.methods.append(attr)

    def run_all(self):
        self.get_methods()
        for method in self.methods:
            method()  # 直接执行方法,不要用return

验证示例

使用原示例代码测试:

class SayHi:
    def __init__(self, user_name):
        self.name = user_name

    def greet_user(self):
        print(f"Hello {self.name}")

    def good_bye(self):
        print(f"Bye {self.name}")

say_hi = SayHi('Steve Rogers')
RunAll(say_hi).run_all()

执行后输出符合预期:

Hello Steve Rogers
Bye Steve Rogers

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:01:13