Python中如何通过用户输入的字符串访问类的属性变量?
错误原因
你写的Abc.p是直接查找Abc类下名为p的属性,Python不会自动将p变量存储的字符串值替换为属性名做查询,所以才会触发「不存在p属性」的报错。
解决方案
使用Python内置的getattr()函数即可实现通过字符串访问对象/类的属性,该函数语法为getattr(目标对象/类, 属性名字符串, [默认值]),第三个可选的默认值参数可以在属性不存在时返回默认值,避免抛出错误。
修正后可运行代码
class Abc: a = 2 b = 3 c = 4 # 改为静态方法,支持直接通过类调用,无需传递self参数 @staticmethod def abc(x, y): return x + y def main(): p = input("Enter the variable name:") q = input("Enter the variable name:") # 通过getattr获取字符串对应的类属性值 val_p = getattr(Abc, p) val_q = getattr(Abc, q) result = Abc.abc(val_p, val_q) print(result) # 输入a、b时输出结果为5 if __name__ == "__main__": main()
额外注意事项
- 如果你不想修改原类的
abc方法定义,调用方法时需要先实例化Abc类,用实例调用实例方法:obj = Abc() result = obj.abc(val_p, val_q) - 若需要兼容用户输入不存在属性的场景,可给
getattr添加默认值,示例:# 属性不存在时返回0,避免报错 val_p = getattr(Abc, p, 0)
内容的提问来源于stack exchange,提问作者sohail awan
相关产品推荐
相关产品推荐

