<p>在我看来,如果您的<code>listSubChildren</code>方法像您暗示的那样返回字符串,那么您可以使用内置的<a href="http://docs.python.org/2/library/functions.html#getattr" rel="nofollow">^{<cd2>}</a>函数。你知道吗</p>
<pre><code>>>> 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"
</code></pre>
<p>或者举个例子:</p>
<pre><code>for name in temp_list:
blah = getattr(object1,name)
</code></pre>
<hr/>
<p>最后一点可能是,根据您实际使用<code>blah</code>做什么,您可能还需要考虑<code>operator.attrgetter</code>。考虑以下脚本:</p>
<pre><code>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')
</code></pre>
<p>两个函数(<code>abc</code>,<code>abc2</code>)的作用几乎相同。<code>abc</code>返回列表<code>[f.a, f.b, f.c]</code>而<code>abc2</code>返回元组的速度要快得多,下面是我的结果前两行分别显示<code>abc</code>和<code>abc2</code>的输出,第三行和第四行显示操作需要多长时间:</p>
<pre><code>[1, 2, 3]
(1, 2, 3)
0.781795024872
0.247200965881
</code></pre>
<p>注意,在您的示例中,可以使用<code>getter = operator.attrgetter(*temp_list)</code></p>