[Python-de] Überladen von Methoden

Bertram Scharpf lists at bertram-scharpf.de
Don Feb 17 08:59:38 CET 2005


Hallo,

Am Donnerstag, 17. Feb 2005, 00:03:58 +0100 schrieb Andreas Pakulat:
> On 16.Feb 2005 - 19:47:54, Christian Helmbold wrote:
> > wie ich gerade mit Entsetzen feststellen musste, kann man in Python gar
> > keine Methoden überladen! Wie umgeht man diese Schwäche am elegantesten?
> > aber spätestens bei einem Constructor geht das nicht mehr. 
> 
> Es gibt keine Konstruktoren in Python, die __init__ Methode ist kein
> Konstruktor, sondern sie erzeugt z.B. Instanzvariablen. Ein
> Konstruktor in C++ oder Java ist etwas das aus dem Nichts eine Instanz
> erzeugt, wie man aber an der Signatur von _init__ sehen kann
> ( __init__(*self*): ) existiert die Instanz beim Aufruf der Funktion
> schon.

Das in Ruby übliche Verfahren ist in Python etwas
umständlich zu formulieren (ungetestet):


    class C
        def __init__( self):
            pass

        def new1( p):
            o = C()
            o.m = p
            return o
        new1 = staticmethod( new1)

        @staticmethod   # Python2.4
        def new2( p, q):
            o = C()
            o.m, o.n = p, q
            return o

    c = C.new1( 'P')
    d = C.new2( 'P', 'Q')


Dabei wäre dann noch der Zugriff auf `__init__()' zu
sperren, indem man den normalen Konstruktor

    q = C()  # ohne `newX'

entweder umdefiniert oder den Zugriff darauf lahmlegt. Daß
dies nicht geht, ärgert mich wiederum.

Bertram


-- 
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de