2010-09-21 34 views
11

print OBJECT llamadas OBJECT.__str__(), cuando se llama OBJECT.__repr__()? Veo que print OBJECT llama al OBJECT.__repr__() cuando OBJECT.__str__() no existe, pero supongo que esa no es la única forma de llamar al __repr__().Cuando se llama __repr __()?

Respuesta

19
repr(obj) 

llama

obj.__repr__ 

el propósito de __repr__ es que proporciona una representación 'formal' del objeto que se supone que es una expresión que puede ser eval ed para crear el objeto. es decir,

obj == eval(repr(obj)) 

debe, pero no siempre en la práctica, rendimiento True

me pidieron en los comentarios de un ejemplo de cuando obj != eval(repr(obj)).

class BrokenRepr(object): 
    def __repr__(self): 
     return "not likely" 

Aquí hay otro:

>>> con = sqlite3.connect(':memory:') 
>>> repr(con) 
'<sqlite3.Connection object at 0xb773b520>' 
>>> 
+0

¿Por qué obj == eval (repr (obj)) no siempre da True? ¿Serías capaz de dar un ejemplo? – inspectorG4dget

+1

Para un objeto complejo, como un archivo, no necesariamente devolverá True. – Avi

+1

@ inspectorG4dget: obj == eval (type ('myclass',(), {})) –

3

repr(obj) llamadas obj.__repr__.

Esto está destinado a describir claramente un objeto, especialmente con fines de depuración. More info in the docs

+0

@ S.Lott gracias por señalar mi error de marcado, ya está arreglado. Simplemente no sé a qué pautas te refieres. –

1

En python 2.x, `` `obj `` will end up calling obj. repr() . It's shorthand for repr() `.

+1

-1: sintaxis desaprobada, que se eliminará. –

+0

@S. Lott: Notado en la respuesta – recursive

7

no sólo __repr__() ser llamado cuando se utiliza repr(), sino también en los siguientes casos:

  1. Usted escribe obj en la cáscara y presiona entrar
  2. ¿Alguna vez imprime un objeto en un diccionario/tupla/lista. P. ej .: print [u'test'] no imprime ['test']
+0

¡Gracias por esto! –

Cuestiones relacionadas