[Python-de] Überladen von Methoden

Holger Duerer python-lists at duerer-sinclair.de
Don Feb 17 11:31:09 CET 2005


>>>>> "Andreas" == Andreas Pakulat <apaku at gmx.de> writes:

    Andreas> On 16.Feb 2005 - 19:47:54, Christian Helmbold wrote:
  [...]
    >> aber spätestens bei einem Constructor geht das nicht mehr. 

    Andreas> Es gibt keine Konstruktoren in Python, die __init__
    Andreas> Methode ist kein Konstruktor, sondern sie erzeugt
    Andreas> z.B. Instanzvariablen.
Hmm.  Es scheint hier einige Begriffsverwirrungen zu geben.

Für mich ist ein Constructor/Konstruktor ein Ding, das ein neu
erzeugtes Objekt initialisiert und (hoffentlich) in einen
wohldefinierten Zustand bringt (z.B. sicherstellt, daß alle
spezifizierten Invarianten gelten).

    Andreas> Ein Konstruktor in C++ oder Java ist etwas das aus dem
    Andreas> Nichts eine Instanz erzeugt,
Ich kann hier dank Unwissenheit nichts über Java sagen, aber in C++
erzeugt der Constructor/Konstruktor gar nix (außer Attributsinstanzen
etc.).  Wenn der aufgerufen wird, ist das Objekt schon alloziert (sei
es auf dem Stack oder Heap).

Verwechselst Du hier etwas mit klassenspezifischen new/delete
Methoden?
(Wie andere schon richtig festgestellt haben, kann man solche via
Metaklassen auch in Python erstellen.)

    Andreas> wie man aber an der Signatur von _init__ sehen kann (
    Andreas> __init__(*self*): ) existiert die Instanz beim Aufruf der
    Andreas> Funktion schon.
Und im C++-Constructor-Body is 'this' bekannt und darf benutzt
werden...


        Holger