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 に答える