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
相关产品推荐
相关产品推荐

