1. Was ist Komposition?
In großen Anwendungen (wie Spotify, Netflix oder Schulsoftware) arbeiten viele Klassen zusammen. Wenn eine Klasse Objekte einer anderen Klasse als Attribute speichert, nennt man das Komposition (oder *"hat-ein"-Beziehung*):
- Eine Schulklasse hat viele Schüler.
- Eine Playlist hat viele Songs.
- Ein Kino hat viele Säle.
2. 🎒 Vollständiges Beispiel: Schüler & Schulklasse Notenmanager
Hier siehst du ein vollständiges Beispiel aus dem Schulalltag: Die Klasse Schueler speichert Name und Note. Die Klasse Schulklasse verwaltet alle Schüler, berechnet den Notendurchschnitt und sucht die Klassenbesten:
# ============================================================================== # KLASSE 1: Ein einzelner Schüler # ============================================================================== class Schueler: def __init__(self, name, note): self.name = name self.note = float(note) def __str__(self): return f"{self.name} (Note: {self.note:.1f})" # ============================================================================== # KLASSE 2: Die Schulklasse verwaltet viele Schüler-Objekte # ============================================================================== class Schulklasse: def __init__(self, klassen_name): self.klassen_name = klassen_name self.schueler_liste = [] def hinzufuegen(self, schueler): self.schueler_liste.append(schueler) def notendurchschnitt(self): if not self.schueler_liste: return 0.0 summe = sum(s.note for s in self.schueler_liste) return summe / len(self.schueler_liste) def beste_schueler(self): # Findet alle Schüler mit einer 1 (Note <= 1.5) return [s for s in self.schueler_liste if s.note <= 1.5] # Ausprobieren: if __name__ == "__main__": klasse_9a = Schulklasse("Klasse 9a") s1 = Schueler("Emma", 1.0) s2 = Schueler("Lukas", 2.3) s3 = Schueler("Mia", 1.3) klasse_9a.hinzufuegen(s1) klasse_9a.hinzufuegen(s2) klasse_9a.hinzufuegen(s3) print(f"Durchschnitt: {klasse_9a.notendurchschnitt():.2f}") # 1.53 print("\nBeste Schüler:") for einserschueler in klasse_9a.beste_schueler(): print(f"- {einserschueler}")
3. Nützliche Kniffe für die Song-Aufgabe
⏱️ Sekunden in "MM:SS" umrechnen
minuten = self.dauer_sekunden // 60 sekunden = self.dauer_sekunden % 60 return f"{minuten:02d}:{sekunden:02d}" # z.B. "03:35"
🔍 Groß- und Kleinschreibung beim Suchen ignorieren
if song.kuenstler.lower() == kuenstler.lower(): treffer.append(song)
4. 🎯 Deine Aufgaben in aufgabe.py
💡 Lösungshinweise (Aufklappen bei Bedarf)
🔍 Tipp zum längsten Song finden
def laengster_song(self): if not self.songs: return None bester_song = self.songs[0] for s in self.songs: if s.dauer_sekunden > bester_song.dauer_sekunden: bester_song = s return bester_song
5. 🧪 Lösung überprüfen
Führe im Terminal im Ordner 05_objekte_kombinieren folgenden Befehl aus:
Terminal
python3 test_aufgabe.py