1. Die Grundidee: Bauplan vs. Echtes Objekt
In Python ist fast alles ein Objekt (Zahlen, Texte, Listen). Mit Klassen lernst du jetzt das mächtigste Werkzeug der Programmierung kennen: Deine eigenen Baupläne zu entwerfen!
Stell dir das Backen in der Küche vor:
- Die Klasse (
class) ist die Ausstechform. Sie legt die Form fest (Kopf, Arme, Beine). Die Form selbst kann man nicht essen. - Das Objekt (Instanz) ist das echte Plätzchen, das du aus dem Teig ausstichst. Ein Plätzchen bekommt Schokoglasur, ein anderes bunte Streusel. Beide stammen aus derselben Form, sind aber zwei völlig eigenständige Plätzchen!
2. Warum machen Klassen deinen Code besser?
Schauen wir uns an, wie man Daten bisher mit Dictionaries gespeichert hat – und warum eine Klasse viel übersichtlicher und sicherer ist:
# Hund 1 mit Dictionary hund1 = {"name": "Bello", "rasse": "Labrador", "alter": 3} # Hund 2: Ups! Hier haben wir uns beim Schlüssel vertippt ("tier_rasse" statt "rasse")! hund2 = {"name": "Luna", "tier_rasse": "Pudel", "alter": 2} # Wenn wir jetzt die Rasse ausgeben wollen: print(hund1["rasse"]) # Funktioniert -> "Labrador" print(hund2["rasse"]) # 💥 KeyError: 'rasse' existiert nicht! Programm stürzt ab!
Jetzt das Ganze mit einer Klasse:
# 1. Wir definieren den gemeinsamen Bauplan: class Hund: pass # 2. Wir erstellen zwei konkrete Hunde (Instanzen): bello = Hund() bello.name = "Bello" bello.rasse = "Labrador" bello.alter = 3 luna = Hund() luna.name = "Luna" luna.rasse = "Pudel" luna.alter = 2 # 3. Jetzt greifen wir mit der Punkt-Notation (.) auf die Eigenschaften zu: print(bello.name, "ist ein", bello.rasse) # Ausgabe: Bello ist ein Labrador print(luna.name, "ist ein", luna.rasse) # Ausgabe: Luna ist ein Pudel
3. 🌟 Vollständiges Praxisbeispiel: Der Fahrrad-Verleih
Hier siehst du ein vollständiges, funktionierendes Python-Skript von Anfang bis Ende. Schau dir genau an, wie Objekte erstellt, Eigenschaften zugewiesen und in Funktionen verwendet werden:
# ============================================================================== # SCHRITT 1: Die Klasse (der Bauplan) definieren # ============================================================================== class Fahrrad: pass # ============================================================================== # SCHRITT 2: Eine Funktion, die Fahrräder beschreibt # ============================================================================== def fahrrad_info(bike): # Wir greifen über den Punkt auf die Attribute des übergebenen Objekts zu: return f"{bike.marke} ({bike.farbe}) - {bike.gaenge} Gänge - {bike.preis_pro_tag}€/Tag" # ============================================================================== # SCHRITT 3: Eine Funktion, die prüft, welches Fahrrad günstiger ist # ============================================================================== def guenstigeres_rad(rad_a, rad_b): if rad_a.preis_pro_tag < rad_b.preis_pro_tag: return rad_a else: return rad_b # ============================================================================== # SCHRITT 4: Wir erzeugen konkrete Objekte und probieren alles aus! # ============================================================================== if __name__ == "__main__": # Erstes Fahrrad-Objekt erstellen: mountainbike = Fahrrad() mountainbike.marke = "Cube" mountainbike.farbe = "Schwarz/Grün" mountainbike.gaenge = 21 mountainbike.preis_pro_tag = 25.0 # Zweites Fahrrad-Objekt erstellen: citybike = Fahrrad() citybike.marke = "Gazelle" citybike.farbe = "Himmelblau" citybike.gaenge = 7 citybike.preis_pro_tag = 15.0 # Infos ausgeben: print("Verfügbare Räder:") print("1.", fahrrad_info(mountainbike)) print("2.", fahrrad_info(citybike)) # Günstigeres Rad finden: schnaeppchen = guenstigeres_rad(mountainbike, citybike) print(f"\nDas günstigere Rad ist das {schnaeppchen.marke} für nur {schnaeppchen.preis_pro_tag}€!")
mountainbike und citybike sind zwei getrennte Variablen im Arbeitsspeicher. Jedes hat seine eigenen Werte für .marke, .farbe und .preis_pro_tag, obwohl beide aus der Klasse Fahrrad stammen!
4. ⚠️ Häufige Stolperfallen für Einsteiger
mein_rad = Fahrrad() ✓ (Richtig: Erzeugt ein neues Objekt!)mein_rad = Fahrrad ✗ (Falsch: Speichert nur den Bauplan in die Variable!)
Haustier, Fahrrad). Variablen und Funktionsnamen schreibt man klein (bello, erstelle_bello()).
erstelle_bello()), muss am Ende unbedingt return mein_tier stehen! Ohne return gibt Python automatisch None zurück.
5. 🎯 Deine Aufgaben in aufgabe.py
Öffne die Datei aufgabe.py in deinem Editor und bearbeite die Aufgaben:
💡 Lösungshinweise (Aufklappen, wenn du Hilfe brauchst)
🔍 Tipp zu TODO 1 & 2 (Klasse & Objekt erstellen)
class Haustier: pass def erstelle_bello(): tier = Haustier() # 1. Neues Haustier-Objekt bauen tier.name = "Bello" # 2. Attribute zuweisen tier.tierart = "Hund" tier.alter = 3 return tier # 3. Objekt zurückgeben!
🔍 Tipp zu TODO 5 (Tiere vergleichen)
def aelteres_tier(tier1, tier2): if tier2.alter > tier1.alter: return tier2 else: return tier1
6. 🧪 Lösung überprüfen
Öffne das Terminal und führe den Test aus:
python3 test_aufgabe.py