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")
В Одере для выполнения цепочечного атрибута призывает к объекту как к строке, я должен был разработать неуклюжий отрывок выше. Мне любопытно, если было бы более умное / эффективное решение этого.
Просто копирую из Полезный код, который использует reduce ()
в Python :
from functools import reduce
reduce(getattr, "X.Y.Z".split('.'), doc)
вы также можете использовать:
from operator import attrgetter
attrgetter('x.y.z')(doc)