Seite 1 von 1

Vererbung in Python

Verfasst: Donnerstag 14. Dezember 2006, 17:07
von dobberph
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

Re: Vererbung in Python

Verfasst: Donnerstag 14. Dezember 2006, 17:24
von Leonidas
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.

Verfasst: Donnerstag 14. Dezember 2006, 17:24
von Rebecca
:?:

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!
>>>

Verfasst: Donnerstag 14. Dezember 2006, 17:29
von dobberph
Ach ja, natürlich
Vererbung falsch rum ist auch schwer...
Glaub ich sollte früher schlafen gehen.
Danke trotzdem,
DerTobi