2010-04-10 15 views
65

¿Cómo se establece/obtener los valores de los atributos de t dado por x.Cómo acceder al atributo de objeto dado cadena correspondiente al nombre de ese atributo

class test(): 
    attr1 = int 
    attr2 = int 

t = test() 
x = "attr1" 
+2

duplicado: http://stackoverflow.com/questions/1887509/access-to-class-attributes-by-using-a-variable-in-python –

+1

duplicado Posible de [Python: propiedad de la clase de acceso de la cadena] (http://stackoverflow.com/questions/1167398/python-access-class-property-from-string) – fejese

Respuesta

149

Se construye en funciones llamadas y getattrsetattr

getattr(object, attrname) 
setattr(object, attrname, value) 

En este caso

x = getattr(t, "attr1") 
setattr(t, 'attr1', 21) 
+5

También hay delattr para eliminar atributos, pero esto se usa muy poco. –

+3

y hasattr para probar si un objeto tiene o no un attr específico, en ese caso usar los tres argumentos getattr (object, attrname, default) es a menudo mejor. – Duncan

+0

¡Esta es definitivamente la manera elegante! – larry

5

Hay pitón construido en funciones SetAttr y getattr. Que puede usar para establecer y obtener el atributo de una clase.

Un breve ejemplo:

>>> from new import classobj 

>>> obj = classobj('Test', (object,), {'attr1': int, 'attr2': int}) # Just created a class 

>>> setattr(obj, 'attr1', 10) 

>>> setattr(obj, 'attr2', 20) 

>>> getattr(obj, 'attr1') 
10 

>>> getattr(obj, 'attr2') 
20 
Cuestiones relacionadas