Konstruktoraufruf bei Vererbung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Dr.Miles
User
Beiträge: 38
Registriert: Montag 15. Dezember 2008, 08:33
Wohnort: Mannheim
Kontaktdaten:

Sonntag 25. Januar 2009, 11:58

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
Zuletzt geändert von Dr.Miles am Sonntag 25. Januar 2009, 12:34, insgesamt 1-mal geändert.
www.i2p2.de <--- sehr interressantes Anonymisierungsprojekt.
www.schaeuble-wegtreten.de <--- Petition gegen Schäuble
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Sonntag 25. Januar 2009, 12:05

Bei der ``OldMaidSpiel``-Klasse wird die ``__init__`` nicht überschrieben, also wird die ``__init__`` der Elternklasse, in dem Fall ``KartenSpiel``, aufgerufen.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
BlackJack

Sonntag 25. Januar 2009, 12:12

@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.
Benutzeravatar
Dr.Miles
User
Beiträge: 38
Registriert: Montag 15. Dezember 2008, 08:33
Wohnort: Mannheim
Kontaktdaten:

Sonntag 25. Januar 2009, 12:34

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...
www.i2p2.de <--- sehr interressantes Anonymisierungsprojekt.
www.schaeuble-wegtreten.de <--- Petition gegen Schäuble
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Sonntag 25. Januar 2009, 13:03

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.
Benutzeravatar
cofi
Moderator
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Sonntag 25. Januar 2009, 13:08

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.
Antworten