如何在字典中调用Python对象方法?代码实现疑问
用字典映射对象方法替代if-else的正确实现
你的思路完全可行,只是原代码存在两个关键问题导致无法运行:
- 字典里存的是方法调用后的返回值,不是可调用的方法本身
input()返回字符串类型,和字典的整数键不匹配
以下是修正后的两种实现方式:
方式一:用lambda包装带参数的方法调用
这种方式简单直接,把带参数的方法调用包装成匿名函数存入字典:
# 实例化对象 my_obj = Foo() # 字典存储可调用的lambda,而非方法执行结果 method_map = { 0: lambda: my_obj.func1(x=5), 1: lambda: my_obj.func1(x=2) } # 转换输入类型为整数 y = int(input()) # 执行对应方法 result = method_map[y]()
方式二:用functools.partial绑定参数
如果需要更规范的参数绑定(比如涉及复杂参数传递),可以用functools.partial:
from functools import partial my_obj = Foo() method_map = { 0: partial(my_obj.func1, x=5), 1: partial(my_obj.func1, x=2) } y = int(input()) result = method_map[y]()
核心要点解释
- 原代码的问题:
my_obj.func1(x=5)会立刻执行,把结果存在字典里,后续访问字典只是拿之前的结果,不会触发新调用。 - 输入必须转类型:
input()返回的是字符串,不转成int的话会找不到对应的整数键,抛出KeyError。 - 别用
dict当变量名:它是Python内置类型,会覆盖原有功能,建议用method_map这类名字。
内容的提问来源于stack exchange,提问作者Gaetano Pispisa
相关产品推荐
相关产品推荐

