Obtener todos los atributos de los objetos en Python?

¿Hay alguna manera de obtener todos los atributos / métodos / campos / etc. de un objeto en Python?

vars() está cerca de lo que quiero, pero no funciona a menos que un objeto tenga un __dict__ , que no siempre es cierto (por ejemplo, no es cierto para una list , un dict , etc.).

Utilice la función incorporada dir() .

Lo que probablemente quieras es dir() .

El problema es que las clases pueden anular el método especial __dir__ , que hace que dir() devuelva lo que la clase quiera (aunque se recomienda que devuelvan una lista precisa, esto no se aplica). Además, algunos objetos pueden implementar atributos dynamics al reemplazar __getattr__ , pueden ser objetos de proxy RPC, o pueden ser instancias de clases de extensión C. Si su objeto es uno de estos ejemplos, es posible que no tengan un __dict__ o que puedan proporcionar una lista completa de atributos a través de __dir__ : muchos de estos objetos pueden tener tantos atributos dynamics que en realidad no sabrá lo que tiene hasta intentas acceder a ella

A corto plazo, si dir() no es suficiente, puede escribir una función que atraviese __dict__ para un objeto, luego __dict__ para todas las clases en obj.__class__.__mro__ ; aunque esto solo funcionará para objetos de python normales. A la larga, es posible que tenga que usar suposiciones .feathers pato – si se parece a un pato, cruce los dedos y espere que tenga .feathers .

Yo uso __dict__

Ejemplo :

 class MyObj(object): def __init__(self): self.name = 'Chuck Norris' self.phone = '+6661' obj = MyObj() print(obj.__dict__) # Output: # {'phone': '+6661', 'name': 'Chuck Norris'} 

Puedes usar dir(your_object) para obtener los atributos y getattr(your_object, your_object_attr) para obtener los valores

uso:

 for att in dir(your_object): print (att, getattr(your_object,att))