Explizite Typangaben in Python

In zahlreichen anderen Programmiersprachen (z.B. C++ oder Java) ist es erforderlich, den Datentyp explizit anzugeben (z.B. str, int, float). Dies wird als statische Typisierung (static typing) bezeichnet. In Python verhält es sich anders. Die Angabe eines Datentyps ist nicht erforderlich, weshalb folgende Zuweisung eines Werts vom Typ int funktioniert:

age = 32

Mit type() lässt sich herausfinden, um welchen Datentyp es sich handelt:

print(type(age))
<class 'int'>

Dies wird als dynamische Typisierung bezeichnet (dynamic typing). Es erleichtert die Programmierung, fördert aber die Fehleranfälligkeit. Und häufig tritt ein Fehler, der auf einen falschen Datentyp zurückzuführen ist, erst zur Laufzeit des Programms in Erscheinung. Seit Python 3.6 ist es deswegen möglich, optional den Datentyp explizit anzugeben. Um beim obigen Beispiel zu bleiben, würde dies bei der Variablenzuweisung wie folgt aussehen:

age: int = 32

Und beim String-Datentyp wie folgt:

name: str = "Alexandra"

Dementsprechend sieht bei einer Funktion die Parameterliste so aus:

def greetings(name: str, age: int):
    print(f"My name is {name} and I'm {age} years old.")

Sofern eine Funktion einen Rückgabewert hat, wird dies mit -> gekennzeichnet:

def multiply(x: int, y: int) -> int:
    return x * y

Nichtsdestotrotz würde der Aufruf dieser Funktion mit der Übergabe eines Arguments vom Typ float unbeanstandet funktionieren:

def multiply(x: int, y: int) -> int:
    return x * y

rval = multiply(2.4, 10)
print(rval)  # 24.0

An dieser Stelle kommen Type-Checker ins Spiel, wobei mypy wohl am weitesten verbreitet sein dürfte. Installiert wird er mit

$ pip install mypy  # Windows
$ pip3 install mypy # Linux, macOS

Wird mypy zusammen mit der zu prüfenden Datei aufgerufen, würde dies in diesem Fall zu folgender Fehlermeldung führen:

type_hints.py:17: error: Argument 1 to "multiply" has incompatible type "float"; expected "int"
Found 1 error in 1 file (checked 1 source file)

Falls bei Euch als Entwicklungsumgebung PyCharm zum Einsatz kommt, findet die integrierte Typprüfung bereits während des Schreibens des Codes statt.

Prüfung des Datentyps in PyCharm
Überprüfung des Datentyps in PyCharm

Auch wenn eine statische Typisierung Vorteile bietet, ist es nicht erforderlich, in jeder Anwendung stets explizit den Datentyp anzugeben. Gerade in kleineren Programmen mag man damit über das Ziel hinausschießen. Spätestens bei Projekten mit mehreren tausend Zeilen Code, ist die statische Typisierung aber äußerst hilfreich.

Für Visual Studio Code steht übrigens eine Erweiterung für die Verwendung von mypy zur Verfügung: die Mypy extension for Visual Studio Code. Sobald diese Erweiterung installiert wurde, wird mypy automatisch ausgeführt.

Weiterführende Links

Zuletzt aktualisiert am 21. Dezember 2023