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

Python:如何通过字符串调用类A的属性值?求助

问题解决:通过字符串动态访问类属性

你的问题核心在于直接用.访问属性时,Python会把attributes当成属性名本身,而不是读取变量里的字符串值。你写的A().attributes其实是在找A实例中名为"attributes"的属性,而不是你传入的参数值(比如"a"),所以自然触发__getattr__的else分支返回"that"。

正确的解决方案:使用getattr()内置函数

Python的getattr()函数就是专门用来通过字符串动态访问对象属性的,它的用法是getattr(对象实例, 属性名字符串)。修正后的完整代码如下:

class A:
    def __getattr__(self, name):
        if name == 'a':
            return 'this'
        else:
            return 'that'

class B:
    def use_a(self, attributes='a'):
        a_instance = A()
        # 传入对象实例 + 字符串形式的属性名
        return getattr(a_instance, attributes)

验证效果

现在调用B().use_a()会返回"this",调用B().use_a('b')会返回"that",完全符合你的预期。

为什么之前尝试getattr没成功?

如果之前用getattr没生效,大概率是写法有误——比如误写成getattr(A().attributes)(把属性访问结果传给了getattr),或者参数顺序搞反了。记住getattr的第一个参数必须是对象实例,第二个是属性名的字符串,别搞混哦。

内容的提问来源于stack exchange,提问作者Chjul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:12:38