Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Exkurs - Implementierung in Python

Deklaration einer Klasse

Am Beispiel der Klassen Sparkonto und Konto sollen die Besonderheiten aufgezeigt werden, die man bei der Implementierung von Vererbung in Python beachten muss.

Ausgangspunkt ist das folgende Klassendiagramm, das die Vererbungsbeziehung der beiden Klassen beschreibt.

Klassendiagramm

Eine Implementierung in Python könnte wie folgt aussehen:

class Konto(object):
    def __init__(self, nummer):
        self.nr = nummer
        self.stand = 0
        self.minimum = -1000.0

    def einzahlen(self, betrag):
        self.stand = self.stand + betrag

    def auszahlen(self, betrag):
        if self.stand - betrag >= self.minimum:
            self.stand = self.stand - betrag
        else:
            print("Auszahlung nicht möglich!")

class Sparkonto(Konto):
    def __init__(self, nummer):
        Konto.__init__(self, nummer)
        self.zinssatz = None
        self.minimum = 0
        self.maxAuszahlung = 2000.0

    def setZinssatz(self, zinssatz):
        self.zinssatz = zinssatz

    def auszahlen(self, betrag):
        if betrag <= self.maxAuszahlung:
            if self.stand - betrag >= self.minimum:
                self.stand = self.stand - betrag
            else:
                print("Auszahlung nicht möglich!")
        

    def zinsenGutschreiben(self):
        zinsen = self.stand * (self.zinssatz / 100)
        self.einzahlen(zinsen)

Die Vererbungsbeziehung wird durch die Deklaration class Sparkonto(Konto) festgelegt. Hier wird die Basisklasse in Klammern angegeben. Wenn keine Vererbungsbeziehung festgelegt werden soll, dann wird - wie im Beispiel class Konto(object) - als Basisklasse object angegeben.

Übernommene Attribute und Methoden werden in der Deklaration der Subklasse nicht aufgeführt. Ergänzende Attribute und Methoden werden wie üblich deklariert. Beim Überschreiben von Methoden kann man oft verschiedene Wege gehen.

Eine Möglichkeit besteht darin, die Definition der Methode neu zu erstellen:

class Konto(object):
    ...

    def auszahlen(self, betrag):
        if self.stand - betrag >= self.minimum:
            self.stand = self.stand - betrag
        else:
            print("Auszahlung nicht möglich!")


class Sparkonto(Konto):
    ...

    def auszahlen(self, betrag):
        if betrag <= self.maxAuszahlung:
            if self.stand - betrag >= self.minimum:
                self.stand = self.stand - betrag
            else:
                print("Auszahlung nicht möglich!")
        else:
            print("Auszahlung nicht möglich!")

    ...

Oft kann man beim Überschreiben aber auch die entsprechende Methode der Basisklasse nutzen:

class Konto(object):
    ...

    def auszahlen(self, betrag):
        if self.stand - betrag >= self.minimum:
            self.stand = self.stand - betrag
        else:
            print("Auszahlung nicht möglich!")


class Sparkonto(Konto):
    ...

    def auszahlen(self, betrag):
        if betrag <= self.maxAuszahlung:
            Konto.auszahlen(self, betrag)
        else:
            print("Auszahlung nicht möglich!")

    ...

Hier wird mit der Anweisung Konto.auszahlen(self, betrag) die Methode auszahlen der Basisklasse Konto aktiviert.

X

Fehler melden

X

Suche