2010-07-19 8 views
5
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") 

Um Kettenattributaufrufe für ein Objekt als String auszuführen, musste ich das kluge Snippet oben entwickeln. Ich bin gespannt, ob es eine cleverere/effizientere Lösung dafür geben würde.Python Chain getattr als String

Antwort

9

Kopieren Sie einfach von Useful code which uses reduce() in Python:

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

Großen snipplet! Leider ist mein Server debian Lenny und läuft mit Python 2.5, während reduzieren erfordert 2.6 :( – Hellnar

+1

@hellinar: 'reduce' ist eine integrierte Funktion in Python2.5 – SilentGhost

+1

@Hellnar: Python 2.5 hat' reduce', außer es ist ein gebaut -in Funktion statt in 'functools' zu sein – kennytm

18

Sie auch nutzen könnten:

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