Type Hints machen sichtbar, welche Daten eine Python-Funktion erwartet und zurückgibt. Sie unterstützen die Zusammenarbeit im Team und ermöglichen statische Prüfungen. Die Annotationen selbst führen jedoch keine Validierung der übergebenen Werte aus.
Eine Funktion beschreiben
Die folgende Funktion erwartet einen Namen als Text und gibt Text zurück. Der Code ist ein kleines, eigenständiges Beispiel.
def begruessung(name: str) -> str:
# Nimmt einen Namen entgegen und gibt eine Begrüßungsnachricht zurück
return f"Hallo, {name}!"
# Nutzung der Funktion
print(begruessung("Welt"))
Speichern Sie das Beispiel in einer Python-Datei. Bei einem statischen Check kann ein Werkzeug wie mypy Aufrufe mit unpassenden Typen melden. Ob ein Problem erkannt wird, hängt davon ab, welche Teile des Codes und der verwendeten Bibliotheken typisiert sind.
Die Typprüfung ins Projekt aufnehmen
Installieren Sie mypy in der Entwicklungsumgebung und verwenden Sie eine zur Codebasis passende Konfiguration. Für Bibliotheken ohne mitgelieferte Typinformationen können zusätzliche Stubs nötig sein. Die folgende Prüfung bezieht sich auf die im Beispiel benannte Datei.
mypy mein_script.py
Beginnen Sie mit überschaubaren Modulen und legen Sie fest, wie Meldungen bearbeitet werden. Große Mengen ungezielt unterdrückter Meldungen machen die Prüfung wenig aussagekräftig. Ein nachvollziehbarer Umgang mit Ausnahmen gehört deshalb zur Einführung.
Die Grenze zu externen Daten beachten
Ein JSON-Objekt aus einer API oder ein Wert aus einem Formular wird nicht durch eine Typannotation geprüft. Validieren Sie solche Eingaben beim Eintritt in Ihre Anwendung und behandeln Sie fehlende, ungültige oder unerwartete Werte. Erst danach sollte die weitere Verarbeitung von einem bestimmten Datenvertrag ausgehen.
Kombinieren Sie statische Prüfung mit Tests für das fachliche Verhalten. Ein fehlerfreier mypy-Lauf belegt, dass die aktivierten Typregeln erfüllt sind. Er belegt keine vollständige Fehlerfreiheit und ersetzt keine Berechtigungs- oder Sicherheitsprüfung.
Weiterführende Dokumentation: mypy: Getting started.