<p>假设您希望对象位于对象名称字符串的末尾:一个示例字符串是<code>'first_class.second_class.third_class.id'</code>,字符串列表的格式都是<code>'X1object.X2object...XNobject.what_you_want_is_here_object'</code>。在</p>
<p>在每种情况下,您都知道X1object有一个活动实例,不管它的具体名称是什么。对于示例字符串,代码已经调用了<code>first_class</code>的实例。您可以用<code>globals['first_class']</code>加载<code>first_class</code>,通常用<code>globals['X1object']</code>加载{<cd6>}。在</p>
<p>您需要的是字符串末尾的对象(通常是一个值)。所以对于示例字符串,您需要<code>id = first_class.second_class.third_class.id</code>的值。有没有一种简单的方法来转换字符串,使其获取其结束对象?在</p>
<p>下面是我为处理这个问题而创建的代码,但它似乎是一种强力方法,它依次获取每个属性,直到找到最后一个属性。在</p>
<pre><code>first_class = FirstClass()
first_class = go_do_something_wild_in_first_class(first_class)
...
attribute = 'first_class.second_class.third_class.id'
attribute_pieces = attribute.split('.')
fetch_attribute = lambda attribute, name: \
attribute[name] if attribute == globals() else \
getattr(attribute, name)
for name in attribute_pieces: # I changed the code from using an index to using a name
if name == attribute_pieces[0]:
attribute = fetch_attribute(globals(), name)
else:
attribute = fetch_attribute(attribute, name)
id = attribute
</code></pre>