3.5.1. Typing (S)#

Behauptung

In Python muss ich mir keine Gedanken machen, wie die Daten aussehen, die ich verarbeite: 0, 1.23 oder „abvcs“ - Python verarbeitet alles irgendwie.

  • Python nimmt Ihnen viel Arbeit ab – aber Typinformation ist trotzdem immer da: Sie bestimmt, wie Bits zu interpretieren sind und welche Operationen erlaubt sind.

  • Wie Sie schon wissen, sind Typen in Python Eigenschaften von Objekten, nicht von Namen. Ein Variablenname kann im Laufe des Programms auf Objekte unterschiedlicher Typen zeigen:

x = 3      # x zeigt auf ein int-Objekt
x = "hi"   # x zeigt jetzt auf ein str-Objekt
x = 4      # x zeigt jetzt auf ein int-Objekt
x = "hi"   # x zeigt jetzt auf ein str-Objekt

Dass eine derartige Zuweisung möglich ist, ist eine direkte Konsequenz aus dem Objektmodell: Der Name wird neu gebunden, das Objekt trägt den Typ (siehe Python‑Datenmodell).

3.5.1.1. Dynamische und starke Typisierung#

Python ist dynamisch typisiert: Welchen Datentyp ein Objekt hat und welche Operationen damit möglich sind, wird zur Laufzeit entschieden.

def potenz(basis, exponent):
    return basis ** exponent

print(potenz(3, 4))        # 81
print(potenz(3.0, 2.0))    # 9.0
print(potenz("a", "b"))    # TypeError zur Laufzeit

Python ist außerdem stark typisiert: Es führt nicht automatisch „magische“ Typumwandlungen durch.

x = "5"
print(2 + x)  # TypeError: int + str

Zum Vergleich (vereinfachtes Beispiel) in JavaScript:

x = "5"
// je nach Kontext entstehen implizite Umwandlungen
y = 2 + x   // ergibt "25"

3.5.1.2. Type Hints#

Mit Type Hints können Softwareentwickler anderen Entwickler:innen Hinweise geben, welche Typen erwartet sind. Zum Beispiel macht es keinen Sinn, die Potenz eines Textes zu berechnen.

Wichtig dabei:

  • Type Hints ändern (standardmäßig) nicht das Laufzeitverhalten.

  • Sie dienen der Dokumentation und Werkzeugunterstützung (IDE, Linter).

def potenz(basis: float, exponent: float) -> float:
    """Berechnet basis^exponent (nur Zahlen)."""
    return basis ** exponent

Klarstellung

  • Python nimmt Ihnen viel Typ‑Arbeit ab, aber Typen sind trotzdem zentral.

  • Python ist dynamisch typisiert (Prüfung zur Laufzeit) und stark typisiert (wenig implizite Konvertierung).

  • Type Hints sind ein Werkzeug: besseres Verständnis, bessere IDE‑Hinweise, früheres Finden von Fehlern.