Ruby中如何用单行代码高效调用类内所有实例方法?
批量调用类中所有实例方法的高效方案
核心思路
要批量调用类的实例方法,关键是精准筛选出自定义的实例方法(排除构造/初始化方法、Python内置方法),然后通过遍历调用即可,这种方式既节省代码量,又不会额外占用过多资源。
代码实现
首先定义你的Sample类示例:
class Sample: def initialize(self): print("初始化完成") def method_a(self): print("调用method_a") def method_b(self): print("调用method_b") def method_c(self): print("调用method_c")
方法1:用dir()+getattr()实现(无需额外依赖)
obj = Sample() obj.initialize() # 先执行初始化逻辑 # 批量调用所有自定义实例方法 for attr_name in dir(obj): attr = getattr(obj, attr_name) # 过滤条件:是可调用方法、不是内置方法、不是初始化方法 if callable(attr) and not attr_name.startswith("__") and attr_name != "initialize": attr()
方法2:用inspect模块实现(更精准)
inspect模块可以直接识别方法类型,避免误判属性:
import inspect obj = Sample() obj.initialize() # 遍历获取所有实例方法 for name, method in inspect.getmembers(obj, predicate=inspect.ismethod): # 排除内置方法和初始化方法 if not name.startswith("__") and name != "initialize": method()
注意事项
- 如果你的方法需要接收参数,可结合
inspect.signature()获取方法的参数签名,提前准备对应参数后再调用 - 上述两种方式的时间复杂度都是O(n)(n为方法数量),空间上仅占用少量遍历所需的临时变量,完全符合高效、省时空的要求
- 务必过滤内置方法(以
__开头结尾的方法),避免误调用__str__、__del__等系统方法引发异常
内容的提问来源于stack exchange,提问作者ajay
相关产品推荐
相关产品推荐

