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.
Respuestas
¿Demasiados anuncios?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',
...
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 elrepr()
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 elstr()
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.