如何创建可执行其他类所有方法的Python类?代码无输出排查
问题分析与代码修复
原代码无法正常运行的核心问题有三个:
run_all方法中使用return,导致循环仅执行第一个方法就终止,后续方法无法运行。- 判断魔法方法的逻辑错误:试图对方法对象调用字符串方法
startswith,这会引发错误,但因为return的存在,该行代码从未执行,所以没有报错。 - 未过滤魔法方法,会收集到
__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
相关产品推荐
相关产品推荐

