2010-07-15 30 views
29

Làm thế nào tôi có thể đạt được công việc như:Python chuỗi thuộc tính

def get_foo(someobject, foostring): 
    return someobject.foostring 

IE:

nếu tôi làm get_foo(obj, "name") nó nên được gọi obj.name (xem đầu vào như chuỗi nhưng tôi gọi nó như một attritube

.

Cảm ơn

+0

bản sao có thể có của [Chức năng gọi động - Python] (http://stackoverflow.com/questions/2818490/dynamically-calling-functions-python) – SilentGhost

+0

Có thể trùng lặp của [Cách truy cập thuộc tính đối tượng cho chuỗi tương ứng với tên của thuộc tính đó] (http://stackoverflow.com/questions/2612610/how-to-access-object-attribute-given-string-corresponding-to-name-of-that-attrib) –

Trả lời

46

Sử dụng chức năng được xây dựng trong getattr

getattr(...) 
    getattr(object, name[, default]) -> value 

    Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y. 
    When a default argument is given, it is returned when the attribute doesn't 
    exist; without it, an exception is raised in that case. 
15

Bạn nên sử dụng setattr và getattr:

setattr(object,'property',value) 
getattr(object,'property',default) 
20

Nếu someobject có thuộc tính có tên foostring sau đó

def get_foo(someobject, foostring): 
    return getattr(someobject,foostring) 

hoặc nếu bạn muốn thiết lập một thuộc tính cho các đối tượng được cung cấp sau đó:

def set_foo(someobject, foostring, value): 
    return setattr(someobject,foostring, value) 

Hãy dùng thử

Các vấn đề liên quan