Python Tutorial
- jetzt Python programmieren lernen

Attribute und Methoden in Klassen überschreiben

Jetzt kann es vorkommen, dass eine unserer Unterklassen eigentlich eine andere Methode benötigt, wie die Oberklasse vorgibt. Daher ist das Überschreiben von Methoden wichtig.

In unserem bisherigen Beispiel gab es das Auto mit einer Anzahl definierter Fahrgäste über die Anzahl der Sitzplätze. Mag man es sich rechtlich ansehen, die die Anzahl der Fahrgäste über die Anzahl der Sitzgurte festgelegt :))

Wir können also in unserer Oberklasse "Fahrzeug" eine Methode "fahrgaesteFestlegen" definieren:

class Fahrzeug:
	sitzplaetze = 4
	def __init__(self, kraftstoff="Benzin", maxGeschwindigkeit=100):
		self.kraftstoff = kraftstoff
		self.maxGeschwindigkeit = maxGeschwindigkeit
	def sitzplaetzeFestlegen(self, sitzplaetzeNeu):
		self.sitzplaetze = sitzplaetzeNeu
	def fahrgaesteFestlegen(self):
		self.maxFahrgaeste = self.sitzplaetze

Die Behauptung, dass die maximale Anzahl der Fahrgäste identisch ist mit der Anzahl der Sitzplätze mag für ein Auto passen. Aber was ist bei einem Autobus? Hier haben wir die Anzahl der Fahrgäste über Sitz- und Stehplätze definiert.

Erstellen wir also eine Klasse "Bus" und geben dieser die 2 Variablen "sitzplaetze" und "stehplaetze" mit. Somit überschreiben wir bei der der Klasse "Bus" die Variable "sitzplaetze" der Klasse "Fahrzeug"

class Bus(Fahrzeug):
    sitzplaetze = 20
    stehplaetze = 30
    def __init__(self, kraftstoff="Benzin", maxGeschwindigkeit=120):
        Fahrzeug.__init__(self, kraftstoff, maxGeschwindigkeit)

Lassen wir uns jetzt den Inhalt der Variablen ausgeben, dass erhalten wir die Anzahl aus der Klasse Bus und nicht die allgemeine Anzahl:

autobus = Bus("Strom", 135)
print(autobus.sitzplaetze)

So wie wir Variablen überschreiben können, können wir auch Methoden überschreiben. Wir wollen die Methode "def fahrgaesteFestlegen(self):" aus der Klasse "Fahrzeug" überschreiben. Die Anzahl der Fahrgäste in einem Bus setzt sich aus den Sitz- und den Stehlplätzen zusammen:

class Bus(Fahrzeug):
    sitzplaetze = 20
    stehplaetze = 30
    def __init__(self, kraftstoff="Benzin", maxGeschwindigkeit=120):
        Fahrzeug.__init__(self, kraftstoff, maxGeschwindigkeit)
    def fahrgaesteFestlegen(self):
        self.maxFahrgaeste = self.sitzplaetze + self.stehplaetze

Und somit bekommen wir das entsprechende Ergebnis:

autobus = Bus("Strom", 135)
autobus.fahrgaesteFestlegen()
print(autobus.maxFahrgaeste)

Um nicht extra immer die Funktion "fahrgaesteFestlegen()" aufrufen zu müssen, können wir diesen Aufuf auch in die __init__ mit reinpacken.

Hier der komplette Quellcode:

class Fahrzeug:
	sitzplaetze = 4
	def __init__(self, kraftstoff="Benzin", maxGeschwindigkeit=100):
		self.kraftstoff = kraftstoff
		self.maxGeschwindigkeit = maxGeschwindigkeit
	def sitzplaetzeFestlegen(self, sitzplaetzeNeu):
		self.sitzplaetze = sitzplaetzeNeu
	def fahrgaesteFestlegen(self):
		self.maxFahrgaeste = self.sitzplaetze

class Bus(Fahrzeug):
    sitzplaetze = 20
    stehplaetze = 30
    def __init__(self, kraftstoff="Benzin", maxGeschwindigkeit=120):
        Fahrzeug.__init__(self, kraftstoff, maxGeschwindigkeit)
        self.fahrgaesteFestlegen()
    def fahrgaesteFestlegen(self):
        self.maxFahrgaeste = self.sitzplaetze + self.stehplaetze

autobus = Bus("Strom", 135)
# autobus.fahrgaesteFestlegen()
print(autobus.maxFahrgaeste)