[Python-de] Überladen von Methoden

Holger Duerer python-lists at duerer-sinclair.de
Mit Feb 16 21:45:05 CET 2005


>>>>> "Christian" == Christian Helmbold <c.helmbold at gmx.de> writes:

    Christian> wie ich gerade mit Entsetzen feststellen musste, kann
    Christian> man in Python gar keine Methoden überladen!  Wie umgeht
    Christian> man diese Schwäche am elegantesten? Übergebt ihr
    Christian> einfach None, wenn ein Parameter leer ist? Bei normalen
    Christian> Methoden könnte man ja noch auf zwei Methoden mit
    Christian> unterschiedlichen Namen ausweichen, aber spätestens bei
    Christian> einem Constructor geht das nicht mehr.

Ja, das ist wirklich ganz entsetzlich, nicht wahr?  In meinen Augen
ist das ist gleich nach dem Unfug mit der Einrückung anstatt von
geschweiften Klammern, die sich nun wirklich in Milliarden von Code
als bewährt herausgestellt haben, die größte Schwäche von Python.
Naja, oder wenigstens nach dem Fehlen von strikter Typisierung, und
generischen Typen die man damit braucht.  Und vielleicht noch dem
Fehlen eines semantisch von dem Rest der Sprache abweichenden
Compile-time Berechnungsmodell (wie es C++ ja z.B. sehr erfolgreich
mit den Templates einsetzt; Templates können nur Gurus, bei Python
kann jeder Hinz und Kunz so etwas; da ist es kein Wunder daß
C++-Programmierer so viel besser bezahlt werden).

Lass Dich nicht von den anderen ablenken.  Nur weil man das in der
Praxis nicht braucht, heißt das ja noch lange nicht daß es in der
Theorie auch funktioniert.

Gottseidank gibt es ja eine Lösung.  Sie Dir doch mal die generischen
Funktionen an:
http://dirtsimple.org/2004/11/generic-functions-have-landed.html

Das ist eine tolle Sache.  Damit kann man zwar auch sinnvolle Dinge
machen aber man kann das auch (wie Überladen) dazu gebrauchen, daß man
am Ende nicht mehr weiß, was passiert.

    Holger