subclases - Obtener todos los atributos de objetos en Python?
python poo tutorial (3)
¿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.).
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 quiera la clase (aunque se recomienda que devuelvan una lista precisa, esto no se aplica). Además, algunos objetos pueden implementar atributos dinámicos al anular __getattr__
, pueden ser objetos 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 dinámicos 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
.
Utilice la función incorporada dir()
.
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''}