Vererbung in Python

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
dobberph
User
Beiträge: 23
Registriert: Mittwoch 8. November 2006, 09:36

Hi ihr,

ich habe eine konkrete Frage:

Code: Alles auswählen

from ADRWriter import ADRWriter
class HtmlWriter(ADRWriter):
    def __write(self, bla):
        pass

Code: Alles auswählen

class ADRWriter:
    def functionXY(self):
        #hier möchte ich auf die Funktion der Klasse ADRWriter zugreifen
        pass
Kann man das? Bzw. wie?

Um kurz zu erklären, was ich eigentlich will:
Ich habe eine Basisklasse HTMLWriter, die Strings in HTML-Dateien schreibt.
Diese Klasse soll man nun erweitern können, indem man sie von anderen aufgesetzten Klassen erben lässt. Im Beispiel soll man über die Klasse HTMLWriter auch auf die functionXY zugreifen können ohne etwas davon mitzubekommen, dass diese Funktion in einer anderen Klasse ausgeführt wird.


Mfg,
DerTobi
Das einzige, was leicht ist, ist verzweifeln...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

dobberph hat geschrieben:

Code: Alles auswählen

from ADRWriter import ADRWriter
class HtmlWriter(ADRWriter):
    def __write(self, bla):
        pass

Code: Alles auswählen

class ADRWriter:
    def functionXY(self):
        #hier möchte ich auf die Funktion der Klasse ADRWriter zugreifen
        pass
Kann man das? Bzw. wie?
Kurz und schmerzlos: nein.
dobberph hat geschrieben:Ich habe eine Basisklasse HTMLWriter, die Strings in HTML-Dateien schreibt.
Diese Klasse soll man nun erweitern können, indem man sie von anderen aufgesetzten Klassen erben lässt. Im Beispiel soll man über die Klasse HTMLWriter auch auf die functionXY zugreifen können ohne etwas davon mitzubekommen, dass diese Funktion in einer anderen Klasse ausgeführt wird.
Das was du willst ist durchaus möglich. Aber in deinem Code ist `ADRWriter` die Basisklasse, von der `HTMLWriter` erbt (simpler: `HTMLWriter` ist ein Sonderfall von `ADRWriter`).

das was du machen willst geht so:

Code: Alles auswählen

class HTMLWriter(object):
    def function_xy(self, eggs):
        pass

class ADRWriter(HTMLWriter):
    pass
Fertig! Wenn eine Funktion in der Kindklasse nicht gefunden wird, dann wird automatisch in der Elternklasse weitergesucht, bis entweder eine solche Funktion gefunden wird, oder eine Exception geworfen, wenn nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

:?:

Wenn die Basisklasse HTMLWriter ist, und du sie erweitern willst, hast du doch dann sowas wie:

Code: Alles auswählen

class ADRWriter(HTMLWriter):
Daraus koennte man wieder die Methoden von der Basisklasse HTML-Writer aufrufen. Ein Beispiel:

Code: Alles auswählen

>>> class Tier:
...     def fressen(self):
...         print "Mampf, mampf."
...
>>> class Schaf(Tier):
...     def fressen(self):
...         Tier.fressen(self);
...         print "Maeh!"
...
>>> berta = Schaf()
>>> berta.fressen()
Mampf, mampf.
Maeh!
>>>
dobberph
User
Beiträge: 23
Registriert: Mittwoch 8. November 2006, 09:36

Ach ja, natürlich
Vererbung falsch rum ist auch schwer...
Glaub ich sollte früher schlafen gehen.
Danke trotzdem,
DerTobi
Das einzige, was leicht ist, ist verzweifeln...
Antworten