Python Chain getattr作为字符串

Hel*_*nar 6 python getattr

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")
Run Code Online (Sandbox Code Playgroud)

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

Sil*_*ost 23

你也可以用:

from operator import attrgetter
attrgetter('x.y.z')(doc)
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 9

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

from functools import reduce
reduce(getattr, "X.Y.Z".split('.'), doc)
Run Code Online (Sandbox Code Playgroud)