Seite 1 von 1

Konstruktoraufruf bei Vererbung

Verfasst: Sonntag 25. Januar 2009, 11:58
von Dr.Miles
Hallo,
ich habe in A Byte of Python gelesen, das die __init__ Methode bei der Vererbung nicht aufgerufen wird:
A Byte of Python hat geschrieben:Danach ist zu beachten, dass die __init__-Methode der Basisklasse unter Benutzung der self-Variable explizit aufgerufen wird, damit der Anteil des Objekts, der von der Basisklasse bereitgestellt wird, initialisiert werden kann. Es ist sehr wichtig, sich dies zu merken - Python ruft nicht automatisch den Konstruktor der Basisklasse auf; Sie müssen ihn selber explizit aufrufen.
Lese aber hier gerade:
Wie ein Informatiker denken lernen hat geschrieben:Weil __init__ von KartenSpiel geerbt wird, enthält ein neues OldMaidSpiel Objekt ein neues gemischtes Paket:
auf Seite http://ada.rg16.asn-wien.ac.at/~python/ ... /kap16.htm

Was stimmt denn nun? Oder übersehe ich da etwas?
Gruß
Dr.Miles

Verfasst: Sonntag 25. Januar 2009, 12:05
von Trundle
Bei der ``OldMaidSpiel``-Klasse wird die ``__init__`` nicht überschrieben, also wird die ``__init__`` der Elternklasse, in dem Fall ``KartenSpiel``, aufgerufen.

Verfasst: Sonntag 25. Januar 2009, 12:12
von BlackJack
@Dr.Miles: Könnte vielleicht deutlicher in dem Text stehen: Man muss die `__init__()` der Basisklasse nur explizit selber aufrufen, wenn man selber eine `__init__()` implementiert. Python ruft nur *eine* `__init__()` automatisch auf, nämlich die erste die in der Vererbungshierarchie gefunden wird.

Verfasst: Sonntag 25. Januar 2009, 12:34
von Dr.Miles
Danke erstmal für die Antworten.

@ Blackjack:
Kann es sein, das A Byte of Python zumindest teilweise nun doch nicht das ideale ist?
Ich habe bisher nur das Kapitel über OOP gelesen, welches meiner Meinung nach nicht nur zu kurz ist, sondern ebenfalls inkorrekt:
__init__()
und __del__()
Über beiedes wurde ich eines besseren belehrt...
Ich sags nur weil hier A Byte of Python immer so empfohlen wird...
Aber Wie ein infomratiker denken lernen ist zum teil auch nicht besser:
Habe inzwischen über 25 Rechtschreibfehler gefunden (Nicht nur in der Rohübersetzung).
(Welche ich den übersetzern auch mailen werden)
Auch sind die Klassennamen mal nicht übersetzt (statt Punkt steht Point).
Auch die Übersetzung allgemein ist nicht immer die "direkteste"...
Ich musste mir manchmal die Source anschauen um wirklich zu wissen was er mit dem Text meint...(Im nachhinein ergibt er dann auch Sinn, aber als Erklärung ist das - zumindest für mich - nicht immer zu gebrauchen.)

Ich will nicht meckern, dafür das es mir kostenlos zur verfügung gestellt wird ist es wunderbares Material, mir sind halt diese "Ungereimtheiten" immer wieder aufgefallen...

Verfasst: Sonntag 25. Januar 2009, 13:03
von Darii
Für __del__ könnt man ihn wirklich hauen, aber die Sache mit __init__ finde ich nicht so tragisch. Zumal es ja nicht falsch ist was da steht. Es ist nunmal sehr schwer alles 110% korrekt zu formulieren und auf alle Sonderfälle einzugehen. Und Rechtschreibfehler kommen nunmal vor.

Verfasst: Sonntag 25. Januar 2009, 13:08
von cofi
Dr.Miles hat geschrieben:Ich sags nur weil hier A Byte of Python immer so empfohlen wird...
Es wird vor allem deshalb empfohlen, da es im Vergleich mit dem Openbook Python weit besser abdeckt, vor allem __del__ ;) oder allgemein die Objekt-Orientierung.

Wenn du allerdings Verbesserungsvorschläge hast, kannst du ja an den Projekten mitarbeiten oder, wenn es keine Projekte sind, dich direkt an den Autor wenden. Die sind bestimmt für jede Hilfe, entsprechend formuliert ;), dankbar.