0%

Deine ersten Klassen und Objekte · Übung

Gib einem Objekt Verhalten

Die Klasse Question erstellt jetzt jede Instanz mit einem Fragetext und einer Antwort. Um zu sehen, wie Verhalten zu dem Zustand rücken kann, den es verwendet, kehren wir kurz zu Beschriftungen zurück. Eine getrennte Funktion kann Text mit einer Beschriftung vergleichen:

def matches(label, text):
    return text == label.text

Die Funktion braucht den Text, der in einer Beschriftung gespeichert ist, und ihr Ergebnis beschreibt diese Beschriftung. Eine Klasse kann dieses Verhalten beim verwendeten Zustand halten, indem sie eine Instanzmethode definiert:

class Label:
    def __init__(self, text, color):
        self.text = text
        self.color = color

    def matches(self, text):
        return text == self.text

Die Methode wird über eine Instanz aufgerufen:

label = Label("Review", "blue")
print(label.matches("Review"))

Python übergibt die Instanz als self. Das Argument "Review" wird zu text.

Eine Verantwortlichkeit hat ihren Platz gefunden

Die Methode macht das Programm nicht wesentlich kürzer. Sie macht den Entwurf klarer:

  • Ein Label kennt seinen eigenen Text.

  • Ein Label entscheidet, ob anderer Text übereinstimmt.

  • Andere Programmteile müssen nicht in das Objekt hineingreifen und diese Regel wiederholen.

Das ist eine Verantwortlichkeit: eine Aufgabe, deren Erledigung ein Programmteil zusagt.

Welches Objekt wird in label.matches("Review") zu self?

Halte die erste Fragemethode einfach. Übertrage das Beschriftungsmuster, indem du die eingegebene Antwort mit der Antwort dieser Frage vergleichst. Spätere Entwürfe können entscheiden, ob Groß- und Kleinschreibung oder umgebende Leerzeichen ignoriert werden sollen.

Aufgabe

Vervollständige is_correct so, dass es zurückgibt, ob response der Antwort dieser Frage entspricht.

Wenn deine Methode funktioniert, verwende Step im Übungseditor. Gehe in den Aufruf von is_correct und suche im aktuellen Methodenaufrufrahmen nach self und response.