Dataclasses und Wertobjekte · Übung
Zur Klasse gehörende Hilfsfunktionen nah halten
Manche Hilfsfunktionen gehören eng zum Thema einer Klasse, brauchen aber weder ein Objekt noch die Klasse selbst.
Einen Rohwert in die bevorzugte Form einer Klasse umzuwandeln ist ein Beispiel:
Eine statische Methode erhält nichts automatisch
@staticmethod lässt die Parameter der Funktion unverändert. Es gibt kein self und kein cls. Sie kann über die Klasse aufgerufen werden:
Duration.split_seconds(150)
Warum ist split_seconds eine statische Methode statt einer Klassenmethode?
Eine Modulfunktion ist ebenso passend
Diese Art von Hilfsfunktion könnte außerhalb der Klasse stehen:
def split_seconds(total):
return total // 60, total % 60
Diese Version ist genauso gut testbar und oft leichter wiederzuverwenden. Behalte eine statische Methode, wenn die Hilfsfunktion so eng mit der Klasse verbunden ist, dass aufrufender Code sie dort erwarten würde. Andernfalls bevorzuge die Funktion auf Modulebene.
Die Wahl dient der Organisation, nicht der Magie. Statische Methoden erhalten keine zusätzlichen Zugriffsrechte und keine besondere Geschwindigkeit.
Die Übung ergänzt eine klassenbezogene Hilfsfunktion und verwendet sie für die Richtigkeitsprüfung. Die alternativen Konstruktoren aus der vorherigen Lektion sind bereits fertig, sodass nur diese Entscheidung bewertet wird.
Aufgabe
Ergänze Question.normalize(response) als statische Methode, die den Text ohne Leerraum an den Rändern und in Kleinbuchstaben zurückgibt.
Passe Question.is_correct(response) so an, dass sowohl die eingegebene als auch die gespeicherte Antwort normalisiert wird. Damit stimmt " DEF " mit "def" überein.
Die vorhandenen alternativen Konstruktoren sind fertig. Ändere ihr Konstruktionsverhalten nicht. Halte die Validierung von Question in __post_init__ intakt.