web-dev-qa-db-fra.com

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

Je C # 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?

110
Jader Dias
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 de __dict__.

130
Georg Schölly

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']
>>> 
65
gimel
52
EBGreen

La propriété __dict__ De l'objet est un dictionnaire de toutes ses autres propriétés définies. Notez que Python peuvent écraser getattr et rendre les choses qui ressemblent à des propriétés mais sont pas dans __dict__. Il y a aussi les fonctions intégrées vars() et dir() qui sont différentes de manière subtile. Et __slots__ peut remplacer __dict__ dans des classes inhabituelles.

Les objets sont compliqués en Python. __dict__ Est le bon endroit pour commencer une programmation de style réflexion. dir() est le point de départ si vous travaillez dans un shell interactif.

12
Nelson

Si vous recherchez une réflexion sur toutes les propriétés, les réponses ci-dessus sont excellentes.

Si vous cherchez simplement à obtenir les clés d'un objet, utilisez

my_dict.keys()

my_dict = {'abc': {}, 'def': 12, 'ghi': 'string' }
my_dict.keys() 
> ['abc', 'def', 'ghi']
11
MrE

georg scholly version plus courte

print vars(theObject)
11
Nicolas Rojo