OOP新手问询:能否通过存储属性名的变量调用类实例属性?
如何通过字符串变量访问Python对象的属性
嘿,这问题一点都不基础——很多刚接触Python和ORM的开发者都会碰到这个场景,完全不用觉得不好意思!答案是完全可以实现,下面给你两种最常用的方案:
1. 使用Python内置的getattr()函数(推荐)
这是处理这类需求的标准方法,Python专门提供了getattr()函数来通过字符串获取对象的属性值。
用法示例:
# 你的原有代码 temp = 'age' dog = Dogs.objects.all()[0] # 使用getattr获取属性值,等价于直接调用dog.age attribute_value = getattr(dog, temp) print(attribute_value)
如果担心字符串对应的属性不存在(比如temp拼写错误),还可以加一个默认值参数,避免抛出AttributeError:
# 如果temp对应的属性不存在,就返回None(你也可以换成其他自定义默认值) attribute_value = getattr(dog, temp, None)
2. 为什么dog.temp会失败?
你尝试的dog.temp之所以不行,是因为Python会把temp当成一个字面量的属性名——它会去查找dog对象有没有一个叫temp的属性,而不是去读取变量temp里存储的字符串'age',逻辑完全不对,自然会报错。
额外说明(针对Django ORM场景)
从你的代码里的IntegerField、FloatField来看,Dogs应该是Django的模型类。除了getattr(),你也可以借助模型的_meta属性获取字段定义,但这通常是用来操作字段本身,而非获取实例的属性值,所以还是getattr()更直接实用。
内容的提问来源于stack exchange,提问作者Shovon
相关产品推荐
相关产品推荐

