© a-image/Shutterstock.com
Statisch typisierten Code in Python entwickeln

Static Typing mit Data Classes und Co.


Wer denkt, Python sei nur eine simple Skriptsprache ohne Typisierung, der irrt sich gewaltig. Dank des typing-Moduls und Type Checkers wie Mypy lässt sich auch in Python statisch typisierter Code entwickeln. Die neuen Datencontainer ab Python 3.6 runden das Bild ab und bringen mit intelligenten Datenzeilen typisiert testbaren Code auf das nächstes Level.

Seit den letzten zwei bis drei Jahren ist Python aus dem Bereich Data Science endgültig nicht mehr wegzudenken und hat sich als Lingua Franca für Projekte rund um künstliche Intelligenz etabliert. Sogar Machine-Learning-Projekte in Apache Spark werden aktuell primär mit dem Python API verwirklicht, obwohl das Spark Framework in Scala entwickelt wird. PySpark ist kein bisschen langsamer als Spark mit Scala, solange man keine eigenen, maßgeschneiderten Funktionen einsetzt. Dennoch hat Scala in Spark einen Mehrwert, den Python nicht bieten kann: der statisch typisierte Code und damit das typisierte DataSet API für noch sichereres Programmieren. Hat Python generell das Nachsehen, wenn Codequalität durch Typisierung von entscheidender Bedeutung ist?

Python nur schwach typisiert? Weit gefehlt!

Die mangelnde Typisierung von Variablen und Funktionen stellt einen der häufigsten Kritikpunkte gegenüber Python dar. Nicht selten hört oder liest man sogar die Behauptung, Python sei einfach eine nur schwach oder gar nicht typisierte Skriptsprache. Tatsächlich handelt es sich bei Python jedoch um eine Sprache mit einer dynamischen starken Typisierung. Das bedeutet konkret, dass die Typisierung zwar erst zur Laufzeit des Codes festgelegt wird, dann aber unveränderlich und eindeutig gesetzt ist.

Ein einfaches Codebeispiel wie "abc" + 123, führt sofort zu einem TypeError. Hier wird eben nicht, wie in manch anderen Sprachen, der Integer 123 implizit in einen String konvertiert und mit dem ersten String verkettet. Die Typen bleiben stattdessen statisch festgelegt.

Die dynamische Typisierung zur Laufzeit ermöglicht zunächst einmal schnelles und flexibles Programmieren gemäß dem Duck-Typing-Paradigma (auch bekannt als Structural Subtyping). Duck Typing bedeutet: Wenn es quakt und Eier legt, muss es wohl eine Ente sein, auch wenn sich dahinter ein Frosch versteckt. Genauso bleibt es in Python zweitrangig, ob man zum Beispiel ein Dictionary verwendet oder ein gänzlich anderes Objekt, das sich augenscheinlich genauso verhält.

Diese Freiheit fordert jedoch mehr Aufwand beim Testen und Debuggen und oft offenbaren sich Fehler leider...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang