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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:25