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

Python中如何使用查找表调用类的实例方法?

问题描述

现有Python类定义:

class MyClass:
    def func_a(self):
        """do a"""

    def func_b(self):
        """do b"""

以及存在错误的映射关系:

mapping = {
    "A": lambda: Myclass.do_a,
    "B": lambda: Myclass.do_b
}

希望实现以下逻辑:遍历列表["A", "B"]时,依次调用实例thing的func_a和func_b方法:

thing = Myclass()

for i in ["A", "B"]:
    # 调用thing对应的方法
解决方案

原映射的核心问题

  1. 类名拼写错误:Python大小写敏感,Myclass应改为MyClass
  2. 未绑定方法问题:原lambda返回的是类的未绑定方法,无法直接通过实例调用,需要手动传入实例参数,不够直观。

推荐实现方式(灵活简洁)

直接将映射改为方法名字符串,结合getattr()获取实例的绑定方法并调用:

class MyClass:
    def func_a(self):
        """do a"""
        print("执行func_a")  # 增加打印便于验证

    def func_b(self):
        """do b"""
        print("执行func_b")

# 映射存储方法名的字符串
mapping = {
    "A": "func_a",
    "B": "func_b"
}

thing = MyClass()

for key in ["A", "B"]:
    # 获取实例对应的方法并调用
    method = getattr(thing, mapping[key])
    method()

另一种实现(保留lambda风格)

如果希望保留lambda的写法,可以让lambda接收实例参数并直接调用方法:

class MyClass:
    def func_a(self):
        """do a"""
        print("执行func_a")

    def func_b(self):
        """do b"""
        print("执行func_b")

# 调整lambda为接收实例参数的形式
mapping = {
    "A": lambda inst: inst.func_a(),
    "B": lambda inst: inst.func_b()
}

thing = MyClass()

for key in ["A", "B"]:
    mapping[key](thing)

执行结果

两种方案运行后都会输出:

执行func_a
执行func_b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:35:17