# Kapitel 10: Vererbung (Inheritance) & super() πŸ§¬πŸš— Willkommen zu Kapitel 10! In diesem Kapitel lernst du eines der mΓ€chtigsten Konzepte der Objektorientierten Programmierung kennen: **Vererbung**. --- ## 🎯 Was du lernst 1. **Was ist Vererbung?** - Basisklasse (Elternklasse / Superklasse) vs. abgeleitete Klasse (Kindklasse / Subklasse). - "Ist-ein"-Beziehung: Ein `Auto` *ist ein* `Fahrzeug`. Ein `ElektroAuto` *ist ein* `Auto`. 2. **Das DRY-Prinzip (Don't Repeat Yourself):** - Gemeinsame Attribute (`marke`, `modell`, `baujahr`, `grundpreis`, `kilometerstand`) und Methoden (`fahren()`, `berechne_restwert()`) mΓΌssen nur **einmal** in der Basisklasse `Fahrzeug` geschrieben werden. 3. **Syntax in Python:** ```python class KindKlasse(ElternKlasse): pass ``` 4. **Der Konstruktor der Elternklasse: `super().__init__()`:** - Mit `super().__init__(...)` delegierst du die Initialisierung der geerbten Attribute an die Elternklasse. 5. **Methoden erweitern & ΓΌberschreiben (Method Overriding):** - Eine Kindklasse kann Methoden der Elternklasse neu definieren oder mit `super().methode()` erweitern. 6. **Typ-PrΓΌfung:** - `isinstance(mein_auto, Fahrzeug)` → `True` - `issubclass(ElektroAuto, Fahrzeug)` → `True` --- ## πŸ“Š UML-Klassendiagramm ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Fahrzeug β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ - marke: str β”‚ β”‚ - modell: str β”‚ β”‚ - baujahr: int β”‚ β”‚ - grundpreis: float β”‚ β”‚ - kilometerstand: float β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ + __init__(marke, modell, baujahr, grundpreis)β”‚ β”‚ + fahren(km: float) -> None β”‚ β”‚ + berechne_restwert(aktuelles_jahr) -> float β”‚ β”‚ + info() -> str β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Auto β”‚ β”‚ Lkw β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ - sitzplaetze: int β”‚ β”‚ - max_zuladung_kg: float β”‚ β”‚ - anzahl_tueren: int β”‚ β”‚ - aktuelle_ladung_kg: floaβ”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ + __init__(..., sitze, ...)β”‚ β”‚ + __init__(..., max_ladung)β”‚ β”‚ + hupen() -> str β”‚ β”‚ + beladen(kg) -> bool β”‚ β”‚ + info() -> str β”‚ β”‚ + entladen(kg) -> float β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ + info() -> str β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ElektroAuto β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ - batterie_kapazitaet_kwh β”‚ β”‚ - batterie_ladestand_kwh β”‚ β”‚ - verbrauch_pro_100km β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ + reichweite() -> float β”‚ β”‚ + fahren(km) -> bool β”‚ β”‚ + aufladen(kwh) -> float β”‚ β”‚ + info() -> str β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## πŸ“ Die Dateien in diesem Ordner - **`index.html`**: Die interaktive Lernseite mit visuellen ErklΓ€rungen, Analogien, Diagrammen und LΓΆsungstipps. - **`aufgabe.py`**: Dein Arbeitsblatt mit den Klassen `Fahrzeug`, `Auto`, `ElektroAuto` und `Lkw`. - **`test_aufgabe.py`**: Automatische Tests (`python3 test_aufgabe.py`). - **`musterloesung.py`**: VollstΓ€ndig ausprogrammierte BeispiellΓΆsung. --- ## πŸš€ Schnellstart ```bash # 1. Bearbeite aufgabe.py # 2. Teste deine LΓΆsung: python3 test_aufgabe.py ```