357 votos

¿Existe una función en Python para imprimir todas las propiedades y valores actuales de un objeto?

Así que lo que estoy buscando aquí es algo como PHP's print_r función. Esto es para poder depurar mis scripts viendo cuál es el estado del objeto en cuestión.

400voto

Jeremy Cantrell Puntos 7858

Quieres que vars() se mezcle con pprint:

from pprint import pprint
pprint (vars(your_object))

193voto

hop Puntos 15423

Realmente estás mezclando dos cosas diferentes.

Utilice dir() o el inspect para obtener lo que te interesa (yo uso __builtins__ como ejemplo; puede utilizar cualquier objeto en su lugar).

>>> l = dir(__builtins__)
>>> d = __builtins__.__dict__

Imprime ese diccionario como quieras:

>>> print l
['ArithmeticError', 'AssertionError', 'AttributeError',...

o

>>> from pprint import pprint
>>> pprint(l)
['ArithmeticError',
 'AssertionError',
 'AttributeError',
 'BaseException',
 'DeprecationWarning',
...

>>> pprint(d, indent=2)
{ 'ArithmeticError': <type 'exceptions.ArithmeticError'>,
  'AssertionError': <type 'exceptions.AssertionError'>,
  'AttributeError': <type 'exceptions.AttributeError'>,
...
  '_': [ 'ArithmeticError',
         'AssertionError',
         'AttributeError',
         'BaseException',
         'DeprecationWarning',
...

70voto

Dan Puntos 18831
def dump(obj):
  for attr in dir(obj):
    print "obj.%s = %s" % (attr, getattr(obj, attr))

24voto

eduffy Puntos 17061

dir se ha mencionado, pero eso sólo te dará los nombres de los atributos. Si quieres sus valores también prueba con __dict__.

class O:
   def __init__ (self):
      self.value = 3

o = O()

>>> o.__dict__

{'valor': 3}

13voto

J.F. Sebastian Puntos 102961

Para imprimir el estado actual del objeto podría:

>>> obj # in an interpreter

o

print repr(obj) # in a script

o

print obj

Para sus clases defina __str__ o __repr__ métodos. De la Documentación de Python :

__repr__(self) Llamado por el repr() función incorporada y por la cadena (comillas inversas) a calcular la cadena "oficial" de un objeto. Si es posible posible, esto debería parecerse a una expresión válida de Python que pueda ser para recrear un objeto con el mismo mismo valor (dado un entorno entorno). Si esto no es posible una cadena de la forma "<...alguna descripción descripción...>". El valor devuelto debe ser una cadena objeto. Si una clase define repr () pero no __str__() entonces __repr__() es también se utiliza cuando una cadena "informal" de instancias de ese clase. Esto se utiliza normalmente para la depuración, por lo que es importante que la representación sea rica en información y no sea ambigua.

__str__(self) Llamado por el str() y por la sentencia print para calcular la representación "informal" de un objeto. Esto difiere de __repr__() en el sentido de que no tiene que ser una expresión válida de Python válida: se puede utilizar una representación más conveniente o más conveniente o concisa. en su lugar. El valor de retorno debe ser un objeto de cadena.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X