0%

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:

Try it

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.