2010-04-10 3 views
65

Comment définissez-vous/obtenez les valeurs des attributs de t donnés par .Comment accéder à l'attribut objet chaîne donnée correspondant au nom de cet attribut

class test(): 
    attr1 = int 
    attr2 = int 

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

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

+1

Possible en double de [Python: accède à la propriété de classe de la chaîne] (http://stackoverflow.com/questions/1167398/python-access-class-property-from-string) – fejese

Répondre

149

Il y a des fonctions intégrées appelées getattr et setattr

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

Dans ce cas

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

Il y a aussi delattr pour supprimer des attributs, mais cela est rarement utilisé. –

+3

et hasattr pour tester si un objet a un attr spécifique bien que dans ce cas en utilisant le formulaire à trois arguments getattr (object, attrname, default) est souvent mieux. – Duncan

+0

C'est certainement la manière gracieuse! – larry

5

Il est python construit dans les fonctions setattr et getattr. Ce qui peut être utilisé pour définir et obtenir l'attribut d'une classe.

Un bref exemple:

>>> 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 
Questions connexes