2017-07-27 4 views
-1

Kann mir bitte jemand helfen, warum die __repr__ Methode mit der q.pop() Methode im folgenden Code aufgerufen wird?Warum wird __repr__ im folgenden Code aufgerufen?

>>> class Item: 
...  def __init__(self, name): 
...   self.name = name 
...  def __repr__(self): 
...   return 'Item({!r})'.format(self.name) 
... 
>>> q = PriorityQueue() 
>>> q.push(Item('foo'), 1) 
>>> q.push(Item('bar'), 5) 
>>> q.push(Item('spam'), 4) 
>>> q.push(Item('grok'), 1) 
>>> q.pop() 
Item('bar') 
>>> q.pop() 
Item('spam') 
>>> q.pop() 
Item('foo') 
>>> q.pop() 
Item('grok') 
>>> 
+2

eine gute Idee, wahrscheinlich in der Frage um den Code zu setzen nicht urheberrechtlich geschütztes Material verknüpfen – pointerless

+0

Sie uns fahren verrückt, wenn Sie den Code auf Ihre Frage nicht hinzufügen. Fügen Sie vor jeder Codezeile zusätzliche 4 Leerzeichen hinzu. –

Antwort

2

Die Einbau-__repr__ Funktion wird verwendet, um ein druckbares Format eines Objekts zurückzukehren. Da in diesem Fall Item ein benutzerdefiniertes Objekt/eine benutzerdefinierte Klasse ist, ermöglicht die Überschreibung in __repr__, dass eine Instanz der Item im Terminal angezeigt wird. Sehen Sie, wenn sie q.pop() aufrufen, wird das Element auf dem Bildschirm gedruckt, und dieses Drucken erfolgt über die Außerkraftsetzung der __repr__-Funktion.

q.pop() druckt Item('bar') weil die überschrieben __repr__ Funktion für Item sagt 'Item({!r})'.format(self.name) zu drucken. Dies druckt das Wort: Item('') und der Formatteil füllt den tatsächlichen Inhalt des Elements zwischen den einzelnen Anführungszeichen aus, was dazu führt, dass Item('bar') auf dem Bildschirm gedruckt wird.

mehr das Lesen Sie hier: Purpose of Python's __repr__

+0

Vielen Dank für Ihre Antwort! Ich habe hier schon einmal von __repr__ gelesen, aber das Ding, das ich nicht sehen kann, ist genau der explizite Aufruf für die __repr__ Funktion. Ich meine, wenn es ein __del__ wäre, könnte ich den expliziten Aufruf verstehen, weil mit dem Pop das Objekt gelöscht wird. Aber die genaue Frage ist, wo der __repr__ durch den pop() aufgerufen wird? –

+1

Die Funktion 'pop()' gibt ein 'Item' zurück. Wenn Sie eine Funktion im REPL-Modus von Python aufrufen (dh wenn Sie 'python' im Terminal ausführen), wird der Rückgabewert jeder Funktion auf dem Bildschirm ausgegeben. Wenn der Rückgabewert gedruckt wird, ruft Python automatisch '__repr__' auf, um das Objekt in eine Zeichenfolge umzuwandeln, die dem Benutzer angezeigt werden kann. Dies ist das Ergebnis, das auf dem Bildschirm angezeigt wird. Es gibt keinen expliziten Aufruf von '__repr__', sondern ein Ergebnis des Python' REPL'-Evaluators. –

Verwandte Themen