Deine ersten Klassen und Objekte · Übung
Lass ein Quiz mit Fragen zusammenarbeiten
Die vorige Lektion hat mehrere unabhängige Question-Objekte in eine Liste gesetzt. Wir können diese Sammlung jetzt einem anderen Objekt geben, das das Quiz als Ganzes darstellt.
Jedes Question kennt seinen Fragetext, seine Antwort und die Art, eine eingegebene Antwort zu prüfen. Ein Quiz hat eine andere Aufgabe: Es hält die Sammlung und wählt, welche Frage eine eingegebene Antwort behandeln soll.
class Quiz:
def __init__(self, questions):
self.questions = questions
Das Quiz-Objekt enthält daher eine Liste, deren Werte Question-Objekte sind:
quiz -> Quiz
questions -> list
-> Question
-> Question
Diese Anordnung heißt Komposition: Ein Objekt wird aus anderen Objekten aufgebaut, die ihre eigenen klar begrenzten Aufgaben behalten.
Delegiere die Detailarbeit
Das enthaltende Objekt kann ein Element auswählen und es die Detailarbeit erledigen lassen. Verwende das Beschriftungsbeispiel aus früheren Lektionen erneut:
class LabelSet:
def __init__(self, labels):
self.labels = labels
def matches(self, index, text):
label = self.labels[index]
return label.matches(text)
LabelSet wiederholt die Regel zum Textvergleich nicht. Es delegiert diese Arbeit an das ausgewählte Label. Die Übung wendet dieselbe Zusammenarbeit auf Quiz und Question an.
Diese Aufteilung gibt jeder Klasse eine klar begrenzte Zusage:
Question.is_correct(response)prüft eine Frage.Quiz.check_answer(index, response)wählt eine Frage aus und delegiert.

Bringe die Zusammenarbeit in die richtige Reihenfolge:
Ziehe die Optionen in die richtige Reihenfolge oder verwende die Pfeiltasten.
QuizruftQuestion.is_correct(response)auf.Quizwählt einQuestionaus seiner Liste aus.Questionvergleicht die eingegebene Antwort mit seiner Antwort.Das boolesche Ergebnis kehrt zum Aufrufer zurück.
Kleine Zusicherungen lassen uns die öffentliche Zusage prüfen:
assert quiz.check_answer(0, "4")
assert not quiz.check_answer(0, "5")
Den Zusicherungen ist egal, welche privaten Hilfsnamen die Klassen verwenden. Sie prüfen, was die Objekte zu tun versprechen.
Aufgabe
Vervollständige Quiz.check_answer.
Wähle die Frage an index aus und delegiere dann die Antwortprüfung an die Methode is_correct dieses Objekts. Führe das Programm aus und halte beide Zusicherungen erfolgreich.