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