2010-07-19 40 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") 

Để xác thực thuộc tính chuỗi gọi đối tượng dưới dạng chuỗi, tôi phải phát triển đoạn mã vụng về phía trên. Tôi tò mò nếu có một giải pháp thông minh hơn/hiệu quả hơn cho việc này.Chuỗi Python getattr dưới dạng chuỗi

Trả lời

9

Chỉ cần sao chép từ Useful code which uses reduce() in Python:

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

lớn snipplet! Đáng buồn là máy chủ của tôi là debian lenny và chạy với python 2.5 trong khi giảm yêu cầu 2.6: ( – Hellnar

+1

@hellinar: 'reduce' là một hàm dựng sẵn trong python2.5 – SilentGhost

+1

@Hellnar: Python 2.5 có' reduce', ngoại trừ nó được xây dựng – kennytm

18

bạn cũng có thể sử dụng:

from operator import attrgetter 
attrgetter('x.y.z')(doc) 
Các vấn đề liên quan