通过Python中的属性的字符串名称获取对象属性

时间:2012-08-09 12:10:47

标签: python django

在下面的代码中,data_var是来自Django查询的对象,即data_var = Datavar.objects.all()。我有field1field2field3等数据库字段。在以下代码中,我尝试将字段的名称作为var中的字符串获取,然后说tg.var但我得到一个错误,因为对象没有属性'var':

如果我说tg.var,则应将其解释为tg.field123。怎么做到这一点?

for tg in data_var:
     for col in range(content.no_of_cols):
        var = "field" + str(col)
        tg.var 

2 个答案:

答案 0 :(得分:6)

要使用字符串名称获取对象的属性,您应该使用getattr内置函数,这样就可以将代码转换为下一行:

for tg in data_var:
     for col in range(content.no_of_cols):
        var = "field" + str(col)
        value = getattr(tg, var)
Python文档中解释了

gettatr

答案 1 :(得分:1)

看起来你正在尝试像PHP一样的变量变量。 Python没有它。你需要使用字典或getattr。

(编辑,因为第一个答案已经涵盖了getattr)。

你也可以从字典中引用它:

>>> var = 'field1'
>>> tg.__dict__[var]
'this is field1'
>>> var = 'field2'
>>> tg.__dict__[var]
'this is field2'
>>> getattr(tg, var)
'this is field2'