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?
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__
.
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']
>>>
dir()
est simple. Vois ici:
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.
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']
georg scholly version plus courte
print vars(theObject)