2010-07-15 9 views
29

¿Cómo puedo lograr tal trabajo:cadena de Python atribuir

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

IE:

si hago get_foo(obj, "name") debería estar llamando obj.name (ver entrada como cadena, pero yo lo llamo como un attritube

.

Gracias

+0

posible duplicado de [Funciones dinámicas de llamada - Python] (http://stackoverflow.com/questions/2818490/dynamically-calling-functions-python) – SilentGhost

+0

Posible duplicado de [Cómo acceder al atributo del objeto cadena dada correspondiente al nombre de ese atributo] (http://stackoverflow.com/questions/2612610/how-to-access-object-attribute-given-string-corresponding-to-name-of-that-attrib) –

Respuesta

46

Uso de la función interna 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

debe utilizar setattr y getattr:

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

Si someobject tiene un atributo llamado foostring continuación

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

o si desea establecer un atributo al objeto proporcionado a continuación:

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

Pruébalo