119 votes

Comment énumérer les propriétés d'un objet en Python?

IC # nous le faisons par réflexion. En Javascript c'est simple comme:

 for(var propertyName in objectName)
    var currentPropertyValue = objectName[propertyName];
 

Comment le faire en Python?

140voto

Georg Schölly Points 63123
 for property, value in vars(theObject).iteritems():
    print property, ": ", value
 

Sachez que dans de rares cas, il existe une propriété __slots__ , de telles classes n'ont souvent pas __dict__ .

65voto

gimel Points 30150

Voir inspect.getmembers(object[, predicate]) .

Renvoie tous les membres d'un objet dans une liste de paires (nom, valeur) triées par nom. Si l'argument de prédicat facultatif est fourni, seuls les membres pour lesquels le prédicat renvoie une valeur vraie sont inclus.

 >>> [name for name,thing in inspect.getmembers([])]
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', 
'__delslice__',    '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', 
'__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', 
'__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__','__reduce_ex__', 
'__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', 
'__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 
'insert', 'pop', 'remove', 'reverse', 'sort']
>>>
 

56voto

EBGreen Points 14478

dir() est le moyen le plus simple. Vois ici:

Guide de l'introspection de Python

13voto

Nelson Points 3878

L' __dict__ de la propriété de l'objet est un dictionnaire de tous ses autres propriétés définies. Notez que les classes Python pouvez remplacer getattr et de faire des choses qui ressemblent à des propriétés, mais ne sont pas en__dict__. Il y a également les fonctions internes vars() et dir() qui sont différents de manière subtile. Et __slots__ peut remplacer __dict__ dans certaines des classes.

Les objets sont complexes en Python. __dict__ est le bon endroit pour commencer pour la réflexion de style de programmation. dir() est l'endroit pour commencer si vous êtes le piratage autour de dans un shell interactif.

11voto

Nicolas Rojo Points 58

georg scholly version plus courte

 print vars(theObject)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X