我想做类似下面的事情:特别是'f.eval(field)'部分,以便它将变量的值计算为字段名称。如何在Python中实现这一目标?
def punctuated_object_list(objects, field):
field_list = [f.eval(field) for f in objects]
if len(field_list) > 0:
if len(field_list) == 1:
return field_list[0]
else:
return ', '.join(field_list[:-1]) + ' & ' + field_list[-1]
else:
return u''
答案 0 :(得分:13)
getattr(f, field)
,如果我理解正确(也就是说,如果您有field = "foo"
,并且想要f.foo
)。如果没有,您可能想澄清一下。 Python有一个eval()
,我不知道你想要的其他语言是什么eval()
。
答案 1 :(得分:4)
getattr( object, 'field' ) #note that field is a string
f = 'field_name'
#...
getattr( object, f )
#to get a list of fields in an object, you can use dir()
dir( object )
有关详细信息,请参阅:http://www.diveintopython.org/power_of_introspection/index.html
不要使用eval ,即使在这种特殊情况下字符串是安全的!只是不要让自己习惯它。如果您从用户那里获取字符串,则可能是恶意代码。
墨菲定律:如果事情可能出错,他们会。
答案 2 :(得分:1)
等同于eval()
的python是eval()
x = 9
eval("x*2")
会给你18。
v = "x"
eval(v+"*2")
也有效。
答案 3 :(得分:0)
要获取Python对象中所有字段的列表,您可以访问其__dict__
属性。
class Testing():
def __init__(self):
self.name = "Joe"
self.age = 30
test = Testing()
print test.__dict__
结果:
{'age': 30, 'name': 'Joe'}