Lösung Aufgabe Vererbung
In der Aufgabe zum Üben (und Testen) von Vererbung von Elternklassen und Überschreiben von Methoden sollten wir zu unserer Klasse „Pkw“ eine weitere Geschwisterklasse erstellen, den „Lkw“. Alle bisher vorhandenen Eigenschaften und Methoden sollen in die Elternklasse „Fahrzeug“ verlagert werden.
Beim Auto zusätzlich Eigenschaft: Kofferraumvolumen
Methode „parken()“ beim Lkw überschrieben mit Ausgabe: „auf Firmenhof abgestellt“.
Der Lkw soll eine zusätzliche Methode bekommen: aufladen()
Sortieren wir die Punkte, in welcher Reihenfolge diese am meisten Sinn ergeben:
- Elternklasse „Fahrzeug“ erstellen
- alle Eigenschaften und Methoden verlagern
- Klasse Auto mit Eigenschaft Kofferraumvolumen erweitern
- Klasse Lkw erzeugen
- Lkw-Methode parken() überschreiben
- Lkw-Methode aufladen() erzeugen
Gehen wir es an:
Punkt 1: Elternklasse „Fahrzeug“ erstellen
Das Erstellen einer neuen Klasse ist nicht wirklich ein Thema:
class Fahrzeug():
""" Klasse für das Erstellen von Fahrzeugen """
Punkt 2: alle Eigenschaften und Methoden verlagern
Nach dem Verlagern müssen wir an die Vererbung denken (class Pkw(Fahrzeug):
) und die __init__ in der Kindklasse entsprechend mit super() ausstatten.
class Pkw(Fahrzeug):
""" Klasse für das Erstellen von Personenkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
Der gesamte Code (auch zum Testen, denn an der Ausgabe hat sich nichts geändert – aber funktionieren sollte es)
class Fahrzeug():
""" Klasse für das Erstellen von Fahrzeugen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
""" Eigenschaften farbe, baujahr, kmstand, Sitzplätze, Marke erfassen """
self.farbe = farbe
self.baujahr = baujahr
self.kmstand = kmstand
self.sitze = sitze
self.marke = marke
def hupen(self):
""" hier sollte noch eine MP3-Datei ausgegeben werden """
print("Trööt")
def fahren(self, km):
""" wie viele KM gefahren werden, was dem Tachostand aufaddiert wird """
self.kmstand += km
print("Ich fahre ", km, " Kilometer")
print("Insgesamt bin ich ", self.kmstand ," gefahren")
def parken(self):
""" neben fahren schon das größere Problem in Städten """
print("Ich habe eine Parkplatz gefunden")
def kilometerstand(self):
""" Ausgabe des KM-Standes vom Tacho """
print("Ich habe ", str(self.kmstand) ," auf dem Tacho")
class Pkw(Fahrzeug):
""" Klasse für das Erstellen von Personenkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
trabi = Pkw("rot", 1981, 143000, 4, "Trabi")
trabi.hupen()
trabi.kilometerstand()
trabi.fahren(5)
Punkt 3: Klasse Auto mit Eigenschaft Kofferraumvolumen erweitern
Wir können auch komplett eigenständige Eigenschaften in einer Kindklasse haben, die nicht in der Elternklasse vorkommen. Das sieht man schön am Kofferraumvolumen.
Diese müssen wir wie gewohnt in der __init__
übertragen:
def __init__(self, farbe, baujahr, kmstand, sitze, marke, kofferraumvolumen):
Und natürlich beim Erzeugen des Objekts nicht vergessen:
trabi = Pkw("rot", 1981, 143000, 4, "Trabi", 20)
Und nun noch in Eigenschaft (self
nicht vergessen) speichern, damit wir darauf zugreifen können:
class Pkw(Fahrzeug):
""" Klasse für das Erstellen von Personenkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke, kofferraumvolumen):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
self.kofferraumvolumen = kofferraumvolumen
Jetzt können wir diese Eigenschaft abfragen
trabi = Pkw("rot", 1981, 143000, 4, "Trabi", 20)
print(trabi.kofferraumvolumen)
Eine von der Elternklasse unabhängige Eigenschaft. Auch andere Geschwisterklassen wissen von der Eigenschaft nichts, denn diese erben nur von der Elternklasse!
Punkt 4: Klasse Lkw erzeugen
Hier kommt bisher keine große Überraschung:
class Lkw(Fahrzeug):
""" Klasse für das Erstellen von Lastkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
Und nun ein Lkw-Objekt erstellen:
lkw_plattnase = Lkw("orange", 1999, 50000, 3, "MAN")
print(lkw_plattnase.farbe)
Am Rande bemerkt: ein klasse Artikel über „Plattnasen“ und „Langhauber“:
https://www.spiegel.de/auto/fahrkultur/warum-lastwagen-in-deutschland-und-den-usa-unterschiedlich-aussehen-a-855319.html
Punkt 5: Lkw-Methode parken() überschreiben
Und nun bekommt unsere Klasse Lkw die Methode „parken()“. Nachdem diese sich exakt gleich schreibt, wie die in der Elternklasse „Fahrzeug“ überschreibt diese die ursprüngliche Methode.
class Lkw(Fahrzeug):
""" Klasse für das Erstellen von Lastkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
def parken(self):
print("auf Firmenhof abgestellt")
lkw_plattnase = Lkw("orange", 1999, 50000, 3, "MAN")
print(lkw_plattnase.farbe)
lkw_plattnase.parken()
Punkt 6: Lkw-Methode aufladen() erzeugen
Und nun noch eine zusätzliche Methode für den Lkw:
class Lkw(Fahrzeug):
""" Klasse für das Erstellen von Lastkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
def parken(self):
print("auf Firmenhof abgestellt")
def aufladen(self):
print("habe fertig geladen")
lkw_plattnase = Lkw("orange", 1999, 50000, 3, "MAN")
print(lkw_plattnase.farbe)
lkw_plattnase.parken()
lkw_plattnase.aufladen()
Und unser kompletter Code:
class Fahrzeug():
""" Klasse für das Erstellen von Fahrzeugen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
""" Eigenschaften farbe, baujahr, kmstand, Sitzplätze, Marke erfassen """
self.farbe = farbe
self.baujahr = baujahr
self.kmstand = kmstand
self.sitze = sitze
self.marke = marke
def hupen(self):
""" hier sollte noch eine MP3-Datei ausgegeben werden """
print("Trööt")
def fahren(self, km):
""" wie viele KM gefahren werden, was dem Tachostand aufaddiert wird """
self.kmstand += km
print("Ich fahre ", km, " Kilometer")
print("Insgesamt bin ich ", self.kmstand ," gefahren")
def parken(self):
""" neben fahren schon das größere Problem in Städten """
print("Ich habe eine Parkplatz gefunden")
def kilometerstand(self):
""" Ausgabe des KM-Standes vom Tacho """
print("Ich habe ", str(self.kmstand) ," auf dem Tacho")
class Pkw(Fahrzeug):
""" Klasse für das Erstellen von Personenkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke, kofferraumvolumen):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
self.kofferraumvolumen = kofferraumvolumen
class Lkw(Fahrzeug):
""" Klasse für das Erstellen von Lastkraftwagen """
def __init__(self, farbe, baujahr, kmstand, sitze, marke):
super().__init__(farbe, baujahr, kmstand, sitze, marke)
def parken(self):
print("auf Firmenhof abgestellt")
def aufladen(self):
print("habe fertig geladen")
lkw_plattnase = Lkw("orange", 1999, 50000, 3, "MAN")
print(lkw_plattnase.farbe)
lkw_plattnase.parken()
lkw_plattnase.aufladen()
trabi = Pkw("rot", 1981, 143000, 4, "Trabi", 20)
print(trabi.kofferraumvolumen)
trabi.hupen()
trabi.kilometerstand()
trabi.fahren(5)