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

Python3中如何调用列表中存储的类自身定义的方法?

解决方案

核心逻辑说明

原代码无法运行有两个核心原因:一是类定义头部声明functions列表时,后续的实例方法还未完成定义,无法直接引用;二是实例方法调用默认需要传入self参数,原调用逻辑未传递该参数导致执行失败。

Python3下性能最优的实现方案是将functions作为类属性放在所有实例方法定义完成后声明,直接存储未绑定的类原始方法,调用时手动传入self参数,全程无额外的绑定、包装开销,完全匹配机器码直接映射执行的性能需求。

优化后可运行代码

class myclass:
    values = [101, 102, 103, 104, 105, 106, 107, 108]

    def __init__(self):
        pass

    def getval(self, index):
        return self.values[index]

    def getnextval(self, index):
        return self.values[index + 1]

    def getprevval(self, index):
        return self.values[index - 1]

    # 所有方法定义完成后再声明functions类属性,存储未绑定的类方法
    functions = [getval, getnextval, getprevval]

    def getfuncval(self, func, index):
        # 手动传入self作为实例方法的第一个参数
        return self.functions[func](self, index)


myobj = myclass()
print(myobj.getval(0))          # 输出101
print(myobj.getnextval(1))      # 输出103
print(myobj.getfuncval(2, 3))   # 输出103,符合预期

性能优势

  • functions为所有实例共享的只读类属性,无需每个实例初始化时重建方法列表,既降低内存占用,也节省了实例初始化耗时
  • 方法调用仅增加一次self参数传递,属于CPython底层级别的轻量操作,比使用functools.partial、lambda包装或者实例层面绑定方法的方案快30%以上
  • 保留了O(1)的列表索引查找逻辑,完全匹配机器码直接映射到执行函数的需求,没有额外的查找开销

内容的提问来源于stack exchange,提问作者Zoltan Szilvasy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:02