Python中如何通过字符串直接调用类内的指定成员函数?
如何通过字符串调用Python类中的实例方法?
你遇到的问题是locals()是Python内置函数,并非类实例的方法,因此obj.locals()的写法是错误的。要通过字符串变量调用类中对应的方法,最简便且规范的方式是使用getattr()内置函数。
核心解决方案
使用getattr()根据字符串名称获取实例方法,随后直接调用:
print(getattr(obj, inv_comp)())
额外需要修正的问题
你的Perpetuity方法未定义self参数,这会导致调用时触发TypeError,必须修正方法定义:
def Perpetuity(self): pass # 可根据实际需求补充实现逻辑
可选:添加错误处理
为了应对用户输入不存在的方法名的情况,建议增加异常捕获,提升代码健壮性:
try: target_method = getattr(obj, inv_comp) print(target_method()) except AttributeError: print(f"错误:不存在名为{inv_comp}的计算方法")
修改后的完整代码示例
class TimeValue: def __init__(self, *args): self.args = args def PV(self): FV,r,n = self.args return f"$ {FV/(1+(r/100))**(n):.3f}" def FV(self): PV,r,n = self.args return f"$ {PV*(1+(r/100))**(n):.3f}" def Annuity(self): C,r,n = self.args return f"$ {(C/(r/100)) * (1-(1/(1+(r/100)) ** (n-1))):.3f}" def Perpetuity(self): return "$ 0.000" # 示例返回值,可按需实现 # 假设req_values已定义,这里给出示例值 req_values = [1000, 5, 10] inv_comp = input("请输入想要的投资计算类型(PV, FV, Annuity, Perpetuity):") obj = TimeValue(*req_values) try: target_method = getattr(obj, inv_comp) print(target_method()) except AttributeError: print(f"错误:不存在名为{inv_comp}的计算方法")
内容的提问来源于stack exchange,提问作者Thavas Antonio
相关产品推荐
相关产品推荐

