2010-09-21 21 views
11

print OBJECT chiamate OBJECT.__str__(), quindi quando viene chiamato OBJECT.__repr__()? Vedo che chiama OBJECT.__repr__() quando OBJECT.__str__() non esiste, ma mi aspetto che non sia l'unico modo per chiamare __repr__().Quando viene chiamato __repr __()?

risposta

19
repr(obj) 

chiama

obj.__repr__ 

lo scopo di __repr__ è che fornisce una rappresentazione 'formale' dell'oggetto che si suppone essere un'espressione che può essere eval ed a creare l'oggetto. cioè,

obj == eval(repr(obj)) 

dovrebbe, ma non sempre, in pratica, resa True

mi è stato chiesto nei commenti per un esempio di quando obj != eval(repr(obj)).

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

Ecco un altro esempio:

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

Perché obj == eval (repr (obj)) non danno sempre vero? Saresti in grado di dare un esempio? – inspectorG4dget

+1

Per un oggetto complesso, ad esempio un file, non restituirà necessariamente True. – Avi

+1

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

3

repr(obj) chiamate obj.__repr__.

Questo è destinato a descrivere chiaramente un oggetto, appositamente per scopi di debug. More info in the docs

+0

@ S.Lott Grazie per aver segnalato il mio errore di markup, ora è stato risolto. Semplicemente non so a quali linee guida ti riferisci. –

1

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

+1

-1: sintassi obsoleta, che verrà rimossa. –

+0

@S. Lott: Notificato in risposta – recursive

7

Non solo __repr__() ottenere chiamato quando si utilizza repr(), ma anche nei seguenti casi:

  1. Si digita obj nel guscio e si preme immettere
  2. Hai mai stampa un oggetto in un dizionario/tuple/lista. Es .: print [u'test'] non stampa ['test']
+0

Grazie per questo! –

Problemi correlati