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

Resuelto fuentesjr asked hace 15 años • 32 respuestas

Entonces, lo que estoy buscando aquí es algo así como la función print_r de PHP .

Esto es para poder depurar mis scripts viendo cuál es el estado del objeto en cuestión.

fuentesjr avatar Oct 10 '08 23:10 fuentesjr
Aceptado

Quieres vars()mezclar con pprint():

from pprint import pprint
pprint(vars(your_object))
Jeremy Cantrell avatar Oct 11 '2008 01:10 Jeremy Cantrell

Realmente estás mezclando dos cosas diferentes.

Utilice dir()o vars()el inspectmódulo para obtener lo que le interesa (lo 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',
...

La impresión bonita también está disponible en el depurador interactivo como comando:

(Pdb) pp vars()
{'__builtins__': {'ArithmeticError': <type 'exceptions.ArithmeticError'>,
                  'AssertionError': <type 'exceptions.AssertionError'>,
                  'AttributeError': <type 'exceptions.AttributeError'>,
                  'BaseException': <type 'exceptions.BaseException'>,
                  'BufferError': <type 'exceptions.BufferError'>,
                  ...
                  'zip': <built-in function zip>},
 '__file__': 'pass.py',
 '__name__': '__main__'}
 avatar Oct 10 '2008 17:10
def dump(obj):
  for attr in dir(obj):
    print("obj.%s = %r" % (attr, getattr(obj, attr)))

Existen muchas funciones de terceros que agregan cosas como manejo de excepciones, impresión de caracteres nacionales/especiales, recursividad en objetos anidados, etc., según las preferencias de sus autores. Pero básicamente todos se reducen a esto.

Dan Lenski avatar Oct 10 '2008 16:10 Dan Lenski