[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