1. Was sind Methoden?
Bisher haben unsere Klassen vor allem Daten gespeichert. Aber in der echten Programmierung haben Objekte auch Verhalten (sie können etwas tun). Funktionen, die innerhalb einer Klasse stehen, nennt man Methoden.
💡 Der Unterschied zwischen Funktion und Methode:
- Eine Funktion steht frei im Code:
berechne_summe(a, b) - Eine Methode gehört zu einem Objekt und wird mit Punkt aufgerufen:
mein_held.angreifen(gegner)
2. 🏎️ Vollständiges Beispiel: Die Rennauto-Klasse
Hier siehst du eine vollständige Klasse mit Konstruktor, mehreren Methoden, Wertebegrenzung (Tankinhalt) und einer Renn-Simulation:
class Rennauto: def __init__(self, fahrer, speed, tank=50): self.fahrer = fahrer self.speed = speed # z.B. 220 km/h self.tank = tank # Aktueller Tank in Litern self.max_tank = tank # Maximales Tankvolumen self.gefahrene_km = 0 # Methode 1: Fahren (verbraucht Benzin) def fahren(self, km): verbrauch = km * 0.2 # 0.2 Liter pro km if self.tank >= verbrauch: self.tank -= verbrauch self.gefahrene_km += km return f"{self.fahrer} fährt {km} km (Tank: {self.tank:.1f}L übrig)" else: return f"{self.fahrer} hat nicht genug Sprit für {km} km!" # Methode 2: Tanken (nicht über max_tank) def tanken(self, liter): freier_platz = self.max_tank - self.tank getankt = min(freier_platz, liter) self.tank += getankt return f"{self.fahrer} tankt {getankt:.1f} Liter nach (Tank: {self.tank:.1f}/{self.max_tank}L)" # Methode 3: Interaktion mit einem anderen Auto def duell_gegen(self, gegner_auto): if self.speed > gegner_auto.speed: return f"{self.fahrer} überholt {gegner_auto.fahrer} mit Leichtigkeit!" elif self.speed < gegner_auto.speed: return f"{gegner_auto.fahrer} zieht an {self.fahrer} vorbei!" else: return f"{self.fahrer} und {gegner_auto.fahrer} sind genau gleich schnell!" # Ausprobieren: if __name__ == "__main__": auto1 = Rennauto("Max", speed=240, tank=40) auto2 = Rennauto("Lewis", speed=235, tank=50) print(auto1.fahren(100)) # Verbraucht 20 Liter -> 20L übrig print(auto1.duell_gegen(auto2)) # Max ist schneller als Lewis! print(auto1.tanken(30)) # Tankt bis max 40L auf
3. 🤝 Interaktion: Ein Objekt übergibt sich an ein anderes
In der Methode angreifen(self, gegner) übergibst du das gegnerische Held-Objekt als Parameter:
⚔️ Wie das Helden-Duell funktioniert:
ritter.angreifen(drache)
1.
self ist der Ritter (mit self.angriffskraft).2.
gegner ist der Drache.3. Der Ritter ruft:
gegner.schaden_erleiden(self.angriffskraft) auf!4. Der Drache verliert Leben und prüft, ob er noch lebt.
4. 🎯 Deine Aufgaben in aufgabe.py
💡 Lösungshinweise (Aufklappen bei Bedarf)
🔍 Tipp zu TODO 4 (Angriff)
def angreifen(self, gegner): if self.ist_am_leben and gegner.ist_am_leben: gegner.schaden_erleiden(self.angriffskraft) return True return False
5. 🧪 Lösung überprüfen
Führe im Terminal im Ordner 03_methoden_und_verhalten folgenden Befehl aus:
Terminal
python3 test_aufgabe.py