1. Warum brauchen wir __init__?
In Kapitel 01 mussten wir jedes Attribut mühsam von Hand setzen:
bello = Haustier() bello.name = "Bello" bello.alter = 3 # Was passiert, wenn man hier das Alter vergisst? -> Programm stürzt ab!
Deshalb gibt es den Konstruktor __init__. Er wird von Python automatisch aufgerufen, sobald ein neues Objekt erstellt wird!
🏗️ Die Geburtsurkunde-Analogie:
Wenn ein neues Objekt "geboren" wird, muss es sofort seine grundlegenden Daten erhalten (Name, Startwert). __init__ ist wie das Ausfüllen des Datenblattes bei der Geburt – danach ist das Objekt sofort einsatzbereit!
2. Was bedeutet self?
Das Wörtchen self steht auf Deutsch für "ich selbst" bzw. "dieses konkrete Objekt hier".
class Bankkonto: def __init__(self, inhaber, kontostand=0.0): self.inhaber = inhaber # Speichere 'inhaber' im Attribut DIESES Objekts self.kontostand = kontostand # Speichere 'kontostand' in MEINEM Speicher # Verwendung: konto_anna = Bankkonto("Anna", 50.0) konto_ben = Bankkonto("Ben") # Verwendet den Standardwert 0.0
💡 Warum
Links vom Gleichheitszeichen steht self.inhaber = inhaber?self.inhaber – das ist die Variable, die am Objekt dauerhaft gespeichert bleibt. Rechts steht inhaber – das ist nur der temporäre Übergabeparameter der Funktion.
3. Häufige Stolperfallen beim Konstruktor
⚠️ Fehler 1: Doppel-Unterstrich vs. Einzel-Unterstrich
Es heißt __init__ mit zwei Unterstrichen davor und danach (Dunder), NICHT _init_! Wenn du nur einen Unterstrich schreibst, ignoriert Python die Methode einfach.
⚠️ Fehler 2:
Jede Methode in einer Klasse muss als allerersten Parameter self im Methodenkopf vergessenself haben:
def einzahlen(self, betrag): ✓
def einzahlen(betrag): ✗ (Führt zu TypeError!)
4. Deine Aufgaben in aufgabe.py
Öffne die Datei 02_init_und_self/aufgabe.py:
💡 Lösungshinweise (Aufklappen bei Bedarf)
Tipp zu TODO 3 (Auszahlen mit Absicherung)
def auszahlen(self, betrag): if betrag > 0 and self.kontostand >= betrag: self.kontostand -= betrag return True return False
5. Lösung überprüfen
Führe im Terminal im Ordner 02_init_und_self folgenden Befehl aus:
Terminal
python3 test_aufgabe.py