Estaba probando un código en el intérprete y noté un comportamiento inesperado para la clase sqlite3.Row
.¿Cómo se puede imprimir un resultado de objeto diferente que str() y repr()?
Mi entendimiento es que print obj
siempre obtendrá el mismo resultado que print str(obj)
, y escribiendo obj
en el intérprete obtendrá el mismo resultado que print repr(obj)
, sin embargo este no es el caso para sqlite3.Row
:
>>> print row # the row object prints like a tuple
(u'string',)
>>> print str(row) # why wouldn't this match the output from above?
<sqlite3.Row object at 0xa19a450>
>>> row # usually this would be the repr for an object
(u'string',)
>>> print repr(row) # but repr(row) is something different as well!
<sqlite3.Row object at 0xa19a450>
pienso sqlite3.Row
debe ser una subclase de tuple
, pero todavía no entiendo exactamente lo que ocurre detrás de escena que podría causar este comportamiento. ¿Alguien puede explicar esto?
Esto se probó en Python 2.5.1, no estoy seguro si el comportamiento es el mismo para otras versiones de Python.
No estoy seguro de si esto importa o no, pero el atributo row_factory
para mi Connection
se configuró en sqlite3.Row
.
¿Has visto http://stackoverflow.com/questions/1436703/difference-between-str-and-repr-in-python antes de publicar? – ktdrv
@kaloyan - No puedo encontrar nada allí que responda a mi pregunta, si puede indicarlo. –
Comportamiento interesante. 'sqlite3.Row' no parece subclasificar tupla, así que supongo que es la lista de impresión de casos especiales y/o tuplas basadas en algunos otros criterios aparte de la herencia, pero no encuentro nada en la documentación que admita, mucho menos explicar esto. – millimoose