
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 _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de