Deine ersten Klassen und Objekte · Übung
Worauf self verweist
Die Klasse Question verwendet self jetzt sowohl in __init__ als auch in is_correct. Wir haben uns bereits mehrmals darauf gestützt. Deshalb nehmen wir uns in dieser Lektion Zeit, genau zu untersuchen, worauf es verweist.
self ist ein Methodenparameter für die Instanz, die den aktuellen Methodenaufruf empfängt. Das kann ungewohnt wirken, weil wir ihn in die Methodendefinition schreiben, bei der üblichen Punktnotation aber nicht ausdrücklich übergeben.
Betrachte zwei Fragen:
first = Question("Two plus two?", "4")
second = Question("Three plus three?", "6")
first.is_correct("4")
second.is_correct("4")
Während des ersten Aufrufs verweist self auf first. Während des zweiten Aufrufs verweist self auf second.
Python verhält sich ungefähr so, als wären die Aufrufe so geschrieben:
Question.is_correct(first, "4")
Question.is_correct(second, "4")
Normalerweise verwendest du die klarere Instanzform. Die ausgeschriebene Form zeigt, woher self kommt.

Der Name ist eine Konvention mit einem Zweck
Python reserviert das Wort self nicht, aber Python-Programmierer verwenden es einheitlich. Diese Konvention beizubehalten macht Methodendefinitionen für alle lesbar.
Innerhalb einer Methode:
bedeutet
self.answerdas Attributanswerder aktuellen Instanz;bedeutet
self.promptdas Attributpromptder aktuellen Instanz;kann ein weiterer Methodenaufruf
self.some_method()verwenden.
Was gibt dieser Code aus?
class Label:
def __init__(self, text):
self.text = text
def show(self):
print(self.text)
first = Label("A")
second = Label("B")
first.show()
second.show()Die wichtige Idee ist nicht, dass jedes Objekt eine Variable namens self enthält. Das tut es nicht. self ist ein Methodenparameter, der vorübergehend auf die Instanz verweist, die diesen bestimmten Aufruf empfängt.
Aufgabe
Vervollständige answer_length so, dass es die Länge der Antwort der aktuellen Frage zurückgibt.
Verwende dann Step im Übungseditor. Verfolge die Aufrufe für first und second. Vergleiche in jedem Methodenaufrufrahmen self.answer mit dem Wert, den len zurückgibt.
Wenn das Variablenpanel die Unterscheidung der beiden Instanzen erschwert, notiere das als Rückmeldung zur Plattform, statt zu raten, was Python getan hat.