在我看来,如果您的listSubChildren
方法按照您的暗示返回字符串,您可以使用内置getattr
函数。
>>> class foo: pass
...
>>> a = foo()
>>> a.bar = 1
>>> getattr(a,'bar')
1
>>> getattr(a,'baz',"Oops, foo doesn't have an attrbute baz")
"Oops, foo doesn't have an attrbute baz"
或者对于您的示例:
for name in temp_list:
blah = getattr(object1,name)
作为最后一点,根据您实际使用的内容blah
,您可能还需要考虑operator.attrgetter
. 考虑以下脚本:
import timeit
import operator
class foo(object):
def __init__(self):
self.a = 1
self.b = 2
self.c = 3
def abc(f):
return [getattr(f,x) for x in ('a','b','c')]
abc2 = operator.attrgetter('a','b','c')
f = foo()
print abc(f)
print abc2(f)
print timeit.timeit('abc(f)','from __main__ import abc,f')
print timeit.timeit('abc2(f)','from __main__ import abc2,f')
两个函数 ( abc
, abc2
) 做的事情几乎相同。 abc
返回列表[f.a, f.b, f.c]
,而abc2
返回元组要快得多,这是我的结果——前两行分别显示和的输出,abc
第三abc2
和第四行显示操作需要多长时间:
[1, 2, 3]
(1, 2, 3)
0.781795024872
0.247200965881
请注意,在您的示例中,您可以使用getter = operator.attrgetter(*temp_list)