9
import amara
def chain_attribute_call(obj, attlist):
    """
    Allows to execute chain attribute calls
    """
    splitted_attrs = attlist.split(".")
    current_dom = obj
    for attr in splitted_attrs:
        current_dom = getattr(current_dom, attr)
    return current_dom

doc = amara.parse("sample.xml")
print chain_attribute_call(doc, "X.Y.Z")

为了将对象的链属性调用作为字符串执行,我不得不开发上面笨拙的片段。我很好奇是否会有更聪明/有效的解决方案。

4

2 回答 2

29

你也可以使用:

from operator import attrgetter
attrgetter('x.y.z')(doc)
于 2010-07-19T16:46:12.047 回答
13

只需从Python中使用的有用代码中reduce()复制:

from functools import reduce
reduce(getattr, "X.Y.Z".split('.'), doc)
于 2010-07-19T07:24:45.987 回答