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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:45:43