web-dev-qa-db-fra.com

Obtenir tous les attributs d'objet en Python?

Est-il possible d'obtenir tous attributs/méthodes/champs/etc. d'un objet en Python?

vars() est proche de ce que je veux, mais cela ne fonctionne que si un objet a un __dict__, ce qui n'est pas t toujours vrai (par exemple ce n’est pas vrai pour un list, un dict, etc.).

309
Mehrdad

Utilisez la fonction intégrée dir() .

413
mouad

Ce que vous voulez probablement, c'est dir() .

Le problème est que les classes peuvent redéfinir la méthode spéciale __dir__, ce qui force dir() à retourner ce que la classe souhaite (même si elles sont encouragées à renvoyer une liste précise, celle-ci n'est pas appliquée). En outre, certains objets peuvent implémenter des attributs dynamiques en remplaçant __getattr__, peuvent être des objets proxy RPC ou des instances de classes d’extension C. Si votre objet est un de ces exemples, il se peut que leur __dict__ ou ne soit pas en mesure de fournir une liste complète d'attributs via __dir__: beaucoup de ces objets peuvent avoir tellement d'attractions dynamiques qu'il ne saura pas réellement ce qu'il a jusqu'à ce que vous essayiez d'y accéder.

À court terme, si dir() ne suffit pas, vous pouvez écrire une fonction qui traverse __dict__ pour un objet, puis __dict__ pour toutes les classes de obj.__class__.__mro__; bien que cela ne fonctionne qu'avec les objets python normaux. À long terme, vous devrez peut-être utiliser la frappe avec du canard + des hypothèses - si cela ressemble à un canard, croisez les doigts et espérez que cela aura .feathers.

73
Eli Collins

J'utilise __dict__

Exemple:

class MyObj(object):
  def __init__(self):
    self.name = 'Chuck Norris'
    self.phone = '+6661'

obj = MyObj()
print(obj.__dict__)

# Output:  
# {'phone': '+6661', 'name': 'Chuck Norris'}
61
Slipstream

Vous pouvez utiliser dir(your_object) pour obtenir les attributs et getattr(your_object, your_object_attr) pour obtenir les valeurs.

utilisation:

for att in dir(your_object):
    print (att, getattr(your_object,att))
11
Jason Angel