如何从字典中调用类实例方法?代码提示‘方法未定义’求助
修复代码中的“方法未定义”问题
你的代码存在几处关键错误,直接导致了“方法未定义”的报错,以下是错误点和修复方案:
错误点梳理
- 字典语法错误:Python字典的键值对必须用
:分隔,你误用了=;同时直接写namePrinter这类方法名会找不到,需通过类或类属性引用方法。 - 实例化参数错误:
luca = foo(luca)中,luca是未定义的变量,应传入字符串类型的名称,比如foo("luca")。 - 实例获取错误:
funCaller中输入的person是字符串,无法直接访问funcs属性,需要把实例存到字典中,通过字符串键获取对应实例。 - 方法调用错误:拿到方法后需要加括号执行,且部分方法需要参数,需补充参数输入逻辑。
修复后的完整代码
class foo: def __init__(self, name): self.name = name def namePrinter(self): print(self.name) def age(self, age=25): self.age = age print(f"已设置年龄为{age}") def birth_year(self, this_year=2022): if hasattr(self, 'age'): self.birthYear = this_year - self.age print(f"出生年份为{self.birthYear}") else: print("请先设置年龄") # 类属性:存储方法名与方法的映射 funcs = { 'print': namePrinter, 'age': age, 'year': birth_year } # 正确实例化,传入字符串名称 luca = foo("luca") mario = foo("mario") alberto = foo("alberto") # 存储实例的字典,用于通过输入的字符串获取对应实例 people = { 'luca': luca, 'mario': mario, 'alberto': alberto } def funCaller(): person_name = input('输入要操作的foo实例名称:') func_name = input('输入要调用的方法名称:') # 校验实例是否存在 if person_name not in people: print("不存在该实例") return person = people[person_name] # 校验方法是否存在 if func_name not in person.funcs: print("不存在该方法") return func = person.funcs[func_name] # 针对不同方法处理参数输入 if func_name == 'age': age_input = input('输入年龄(默认25):') age = int(age_input) if age_input.strip() else 25 func(age) elif func_name == 'year': year_input = input('输入当前年份(默认2022):') this_year = int(year_input) if year_input.strip() else 2022 func(this_year) else: func() # 调用测试 funCaller()
修复说明
- 把
funcs设为类属性,直接绑定实例方法,调用时无需手动传入实例参数。 - 用
people字典存储实例,实现通过输入的字符串快速获取对应实例。 - 补充了参数输入逻辑和合法性校验,避免因参数缺失导致的报错。
内容的提问来源于stack exchange,提问作者Simple_coder
相关产品推荐
相关产品推荐

