Kapitel 04

Schöne Ausgaben mit __str__ & Objektlisten 🧾

Lerne, wie du bestimmst, was beim print(objekt) erscheint und wie Objekte andere Objekte in Listen verwalten.

1. Warum sieht print(objekt) standardmäßig so hässlich aus?

Wenn du versuchst, ein Objekt ohne Dunder-Methode zu drucken:

mein_buch = Buch("Harry Potter", "J.K. Rowling")
print(mein_buch)  # Ausgabe: <__main__.Buch object at 0x7fa2b0485d90>

Python weiß ohne deine Hilfe nicht, wie du dein Objekt darstellen möchtest.

✨ Die Magie von __str__:
Sobald du in deiner Klasse eine Methode def __str__(self): definierst, ruft Python diese automatisch auf, wann immer das Objekt zu Text umgewandelt wird (bei print(), str() oder in f-Strings)!
Python
class Buch:
    def __init__(self, titel, autor):
        self.titel = titel
        self.autor = autor

    def __str__(self):
        return f"'{self.titel}' von {self.autor}"  # MUSS ein String sein!

mein_buch = Buch("Harry Potter", "J.K. Rowling")
print(mein_buch)  # Ausgabe: 'Harry Potter' von J.K. Rowling

2. Objekte in Listen verwalten

Eine Klasse kann als Attribut eine Liste von anderen Objekten haben:

🛒 Der Warenkorb:
Ein Warenkorb besitzt eine Liste self.artikel_liste = []. Wenn du einen Artikel hinzufügst, landet das ganze Artikel-Objekt in der Liste!

3. Deine Aufgaben in aufgabe.py

💡 Lösungshinweise (Aufklappen bei Bedarf)

Tipp zu TODO 7 (Kassenzettel zusammensetzen)
def bon_text(self):
    zeilen = ["--- KASSENZETTEL ---"]
    for artikel in self.artikel_liste:
        zeilen.append(str(artikel))  # Nutzt automatisch __str__ des Artikels!
    zeilen.append("--------------------")
    zeilen.append(f"Gesamtsumme: {self.gesamtsumme():.2f} €")
    return "\n".join(zeilen)

4. Lösung überprüfen

Führe im Terminal im Ordner 04_str_und_darstellung folgenden Befehl aus:

Terminal
python3 test_aufgabe.py