Python – 08 Type Hints
Voraussetzungen
Bevor du mit diesem Modul startest, solltest du bereits vertraut sein mit:
- Python – 07 Funktionen und Methoden - Funktionen definieren, Parameter und Rückgabewerte
Optionales Bonusmaterial
Type Hints sind für die Grundlagen nicht zwingend erforderlich. Dein Code läuft ohne sie genauso. Sie sind aber Standard in professionellem Python – und sie sind die Brücke zur objektorientierten Programmierung, die du später mit UML-Klassendiagrammen planst.
Wofür braucht man das?
Python ist eine dynamisch typisierte Sprache: Eine Variable kann alles Mögliche enthalten, und du siehst es dem Code nicht an.
| |
Was ist a? Eine Zahl? Ein Text? Beides funktioniert – 3 * 4 ergibt 12, aber "ab" * 3 ergibt "ababab". Wer diese Funktion benutzt, muss raten oder den Code lesen.
Mit Type Hints schreibst du die Antwort direkt hin:
| |
Gelesen: nimmt zwei Kommazahlen, gibt eine Kommazahl zurück.
Der Nutzen:
| Vorteil | Was passiert konkret |
|---|---|
| Dokumentation | Die Funktionssignatur erklärt sich selbst – kein Kommentar nötig. |
| Editor-Hilfe | VS Code / PyCharm kennen den Typ und schlagen passende Methoden vor (.upper() bei str, .append() bei list). |
| Fehler vor dem Start | Der Editor unterstreicht berechne("Hallo", 3), bevor du das Programm laufen lässt. |
| Teamarbeit | Andere (und du in drei Monaten) verstehen deine Funktion, ohne sie zu lesen. |
| Planung | Typen sind genau das, was im UML-Klassendiagramm steht (siehe unten). |
Python prüft die Typen nicht
Type Hints sind Hinweise, keine Kontrolle. Das hier läuft ohne Fehlermeldung durch:
| |
Geprüft wird von deinem Editor oder einem Extra-Programm wie mypy, nicht von Python selbst.
Die Syntax
Variablen
Doppelpunkt hinter den Namen, dann der Typ.
| |
Bei so einfachen Fällen lässt man die Angabe meist weg – Python sieht ja selbst, dass "Alice" ein String ist. Richtig nützlich werden Type Hints bei Funktionen.
Funktionen
Typ hinter jedem Parameter, Rückgabetyp hinter dem Pfeil ->.
| |
Funktionen ohne return bekommen -> None (“gibt nichts zurück”):
| |
Listen und Dictionaries
In den eckigen Klammern steht, was drin ist.
| |
Kein Import nötig
In älteren Anleitungen findest du from typing import List, Dict. Seit Python 3.9 schreibt man einfach list[int] und dict[str, int] – klein geschrieben, ohne Import.
Mehrere Typen erlauben
Der senkrechte Strich | bedeutet “oder” (ab Python 3.10):
| |
Häufigster Fall: Etwas ist da – oder eben None.
| |
Bezug zu UML-Klassendiagrammen
Bevor man objektorientiert programmiert, plant man mit einem UML-Klassendiagramm. Dort notiert man für jedes Attribut und jede Methode den Datentyp – genau die Information, die Type Hints im Code festhalten. Ohne Type Hints geht diese Information beim Übersetzen ins Programm verloren.
classDiagram
class Rechteck {
-laenge: float
-breite: float
+flaeche() float
+skaliere(faktor: float)
}
Die Übersetzung ist fast Zeichen für Zeichen dieselbe:
| UML | Python mit Type Hints |
|---|---|
- laenge: float | self.laenge: float = laenge |
+ flaeche(): float | def flaeche(self) -> float: |
+ skaliere(faktor: float) | def skaliere(self, faktor: float) -> None: |
| kein Rückgabetyp im Diagramm | -> None |
| |
Das funktioniert auch rückwärts: Aus getyptem Code kannst du das Diagramm direkt ablesen, aus untypisiertem Code musst du raten. Mehr dazu in OOP – UML-Klassendiagramm.
Aufgaben
Aufgabe 1: Typen ergänzen
Ergänze Type Hints für Parameter und Rückgabewerte:
| |
Bei welcher Funktion war es am schwersten? Warum?
Aufgabe 2: Signatur lesen
Was macht diese Funktion vermutlich – nur anhand der ersten Zeile?
| |
Schreibe eine passende Implementierung dazu.
Aufgabe 3: Vom Diagramm zum Code
Übersetze dieses Klassendiagramm in Python – mit Type Hints:
classDiagram
class Schueler {
-name: str
-noten: list~int~
+note_hinzufuegen(note: int)
+durchschnitt() float
+ist_versetzt() bool
}
Aufgabe 4: Grenzen erkennen
Probiere aus:
| |
Was gibt Python aus? Warum meldet der Type Hint keinen Fehler – und was zeigt dir dein Editor trotzdem an?
Fazit
- Type Hints sagen, welche Daten rein- und rausgehen.
- Sie machen Code lesbar, ermöglichen Editor-Warnungen und ersparen Kommentare.
- Python prüft sie nicht zur Laufzeit – Editor oder
mypytun das. - Sie sind die Code-Entsprechung der Typangaben im UML-Klassendiagramm.