Python 链式获取属性作为字符串

11 投票
2 回答
4035 浏览
提问于 2025-04-16 01:30
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")

为了能够把一个对象的多个属性调用连在一起并以字符串的形式执行,我不得不写出上面这个比较笨拙的代码片段。我很好奇是否有更聪明或者更高效的解决办法。

2 个回答

35

你也可以使用:

from operator import attrgetter
attrgetter('x.y.z')(doc)
15

这段话是说,下面的代码是从一个关于在Python中使用reduce()函数的有用代码的讨论中复制过来的,链接在这里:

from functools import reduce
reduce(getattr, "X.Y.Z".split('.'), doc)

撰写回答