20% off with code ERSTIS26
5 min read 04 Aug 2026

Verschachtelte Klassen in Python: Wann sinnvoll?

Stell dir vor, du entwickelst eine Software für einen Smart-Home-Server. Du hast eine Klasse `Haus`, die die gesamte Gebäude-Logik steuert. Jetzt brauchst du eine Datenstruktur für die Thermostat-Einstellungen. Diese Einstellungen werden nirgendwo anders im System verwendet, außer innerhalb eines `Haus`-Objekts. Genau hier kommen verschachtelte Klassen (engl. *nested classes*) ins Spiel. Egal, ob du dich gerade in deiner Umschulung zum Fachinformatiker, im Informatik-Studium oder in der...

Marcel Schmidtpeter By Marcel Schmidtpeter 04 Aug 2026

Stell dir vor, du entwickelst eine Software für einen Smart-Home-Server. Du hast eine Klasse `Haus`, die die gesamte Gebäude-Logik steuert. Jetzt brauchst du eine Datenstruktur für die Thermostat-Einstellungen. Diese Einstellungen werden nirgendwo anders im System verwendet, außer innerhalb eines `Haus`-Objekts. Genau hier kommen verschachtelte Klassen (engl. *nested classes*) ins Spiel.

Egal, ob du dich gerade in deiner Umschulung zum Fachinformatiker, im Informatik-Studium oder in der Einarbeitung für deinen ersten Job als Junior Developer befindest: Du wirst über Code-Strukturen stolpern, die komplex wirken, aber eigentlich ganz simpel sind. Python verschachtelte Klassen sind so ein Thema - und in diesem Artikel klären wir, wann sie sich wirklich lohnen.

Was sind verschachtelte Klassen in Python?

Eine verschachtelte Klasse ist eine Klasse, die im Körper einer anderen Klasse definiert wird. Die äußere Klasse umschließt die innere Klasse. Das Konzept kennst du vielleicht bereits aus anderen Programmiersprachen. Wer sich dafür interessiert, kann sich auch den Beitrag zu Java innere Klassen: Wann und warum? Einfach erklärt ansehen, da das Prinzip ähnlich funktioniert.

In Python definierst du die innere Klasse einfach eingerückt unter der äußeren:

python
class AussenKlasse:
    class InnenKlasse:
        def zeige_nachricht(self):
            print("Ich bin die innere Klasse.")

Der Hauptzweck dieser Struktur ist die logische Gruppierung. Du zeigst anderen Entwicklern: "Diese innere Klasse gehört funktional zur äußeren Klasse und macht außerhalb davon keinen Sinn." Es ist wie bei einer Matrjoschka-Puppe: Die kleine Puppe lebt nur im Bauch der großen Puppe.

Kernidee: Eine verschachtelte Klasse existiert nur, um die äußere Klasse bei ihrer Aufgabe zu unterstützen. Sie hat außerhalb dieses Kontexts keine Berechtigung.

Wann nutzt man verschachtelte Klassen?

Du nutzt verschachtelte Klassen, wenn eine Klasse als Hilfskonstrukt (ein sogenanntes Helper-Objekt) ausschließlich für eine andere, übergeordnete Klasse relevant ist.

Warum? Weil du damit deinen Namespace (den Namensraum) sauber hältst. Ein Namensraum ist wie ein Adressbuch für Variablen, Funktionen und Klassen. Wenn du jede winzige Hilfsklasse global im Code definierst, wird dein Projekt schnell unübersichtlich. Die offizielle Python-Dokumentation zu Namensräumen erklärt das Konzept detailliert.

Stell dir vor, du programmierst ein Netzwerk-Tool. Du hast eine Klasse `NetzwerkVerbindung`. Für diese Verbindung brauchst du eine spezielle Datenstruktur für `Pakete`. Niemand sonst in deiner App braucht diese `Paket`-Klasse. Also definierst du sie direkt in `NetzwerkVerbindung`.

Flach vs. Verschachtelt im Vergleich

Eigenschaft

Flache Klassen (getrennt)

Verschachtelte Klassen

Übersichtlichkeit

Niedrig bei vielen Hilfsklassen

Hoch, da Logik gebündelt ist

Zugriff von außen

Direkt über den Klassennamen

Nur über `Aussen.Innen`

Wiederverwendbarkeit

Hoch (überall nutzbar)

Gering (spezifisch für Kontext)

Namespace-Verschmutzung

Möglich bei vielen Klassen

Minimal

Faustregel: Verwende verschachtelte Klassen nur, wenn die innere Klasse eine enge, logische Beziehung zur äußeren Klasse hat und nirgendwo sonst gebraucht wird.

Wie greift man auf innere Klassen zu?

Um eine Instanz (ein konkretes Objekt) einer inneren Klasse zu erstellen, musst du den Namen der äußeren Klasse als Präfix verwenden.

Du greifst also nicht direkt auf `InnenKlasse` zu, sondern auf `AussenKlasse.InnenKlasse`. Das ist ein wichtiger Unterschied zu Sprachen wie Java, wo es teilweise automatische Referenzen auf das Eltern-Objekt gibt.

python
class SmartHome:
    """Aeussere Klasse fuer ein Smart Home Geraet."""

    class Thermostat:
        """Innere Klasse, nur fuer SmartHome relevant."""

        def zeige_temperatur(self):
            print("Aktuelle Temperatur: 21 Grad.")


# Erstelle ein Objekt der aeusseren Klasse
haus = SmartHome()

# Erstelle ein Objekt der inneren Klasse ueber die Instanz
heizung = haus.Thermostat()
heizung.zeige_temperatur()

# Alternativ geht auch das direkt ueber die Klasse:
kuehlen = SmartHome.Thermostat()
kuehlen.zeige_temperatur()

Beide Wege führen zum gleichen Ergebnis. Du kannst die innere Klasse entweder über eine Instanz der äußeren Klasse (`haus.Thermostat()`) oder direkt über die Klassenreferenz (`SmartHome.Thermostat()`) erstellen.

Wie sieht das in der Praxis aus? Das Builder-Pattern

Das Builder-Pattern ist ein Entwurfsmuster aus der Softwarearchitektur. Es hilft dir, Objekte mit sehr vielen Konfigurationsmöglichkeiten übersichtlich zu erstellen. In der Berufspraxis siehst du verschachtelte Klassen genau hier besonders oft.

Stell dir vor, du baust einen PC-Konfigurator für einen Onlineshop:

python
class Computer:
    def __init__(self, seriennummer):
        self.seriennummer = seriennummer
        self.cpu = None
        self.ram = None

    # Die innere Klasse uebernimmt den Aufbau
    class Builder:
        def __init__(self, seriennummer):
            self.computer = Computer(seriennummer)

        def setze_cpu(self, cpu_typ):
            self.computer.cpu = cpu_typ
            return self

        def setze_ram(self, ram_groesse):
            self.computer.ram = ram_groesse
            return self

        def baue(self):
            return self.computer


# So nutzt du den Builder im Code:
builder = Computer.Builder("PC-12345")
mein_pc = builder.setze_cpu("Intel i7").setze_ram("32GB").baue()

print(mein_pc.cpu)
print(mein_pc.ram)

Das `return self` sorgt dafür, dass wir die Methoden verketten können (sogenanntes *Method Chaining*). Wenn du mehr darüber erfahren willst, wie Methoden auf sich selbst verweisen, hilft dir der Artikel zu self in Python verstehen: Wozu dient es?.

Praxis-Tipp: Der Builder ist das klassische Einsatzgebiet für verschachtelte Klassen. Wenn du ihn einmal verstanden hast, wirst du ihn in vielen realen Codebases wiedererkennen.

Welche Fehler solltest du vermeiden?

Besonders Berufseinsteiger und Azubis tappen oft in die gleichen Fallen. Hier sind die zwei häufigsten Fehler - und wie du sie umgehst.

Fehler 1: Automatischer Zugriff auf Variablen der äußeren Klasse

Ein extrem häufiger Irrtum ist die Annahme, dass die innere Klasse automatisch auf die Attribute (Variablen) der äußeren Klasse zugreifen kann. Das ist in Python falsch.

Eine innere Klasse in Python ist im Grunde eine völlig eigenständige Klasse. Sie hat keinen automatischen Zugriff auf die Instanzvariablen der äußeren Klasse.

So geht's falsch:

python
class Firma:
    def __init__(self):
        self.firmenname = "TechCorp"

    class Abteilung:
        def zeige_firma(self):
            # Das wirft einen AttributeError!
            print(self.firmenname)

So ist es richtig:

Du musst der inneren Klasse die benötigten Werte einfach als Parameter übergeben.

python
class Firma:
    def __init__(self):
        self.firmenname = "TechCorp"
        # Instanziierung der inneren Klasse und Uebergabe des Namens
        self.it_abteilung = self.Abteilung(self.firmenname)

    class Abteilung:
        def __init__(self, name_der_firma):
            self.name_der_firma = name_der_firma

        def zeige_firma(self):
            print(f"Wir arbeiten fuer: {self.name_der_firma}")


meine_firma = Firma()
meine_firma.it_abteilung.zeige_firma()

Wichtig: Anders als in Java gibt es in Python keine implizite Referenz der inneren Klasse auf die Instanz der äußeren Klasse. Du musst Daten explizisch übergeben.

Fehler 2: Over-Engineering (Zu viel verschachteln)

Nicht jedes kleine Detail muss eine eigene innere Klasse sein. Wenn du anfängst, Klassen drei oder vier Ebenen tief zu verschachteln, machst du den Code unleserlich.

Wenn eine Klasse eigenständig funktioniert, halte sie flach auf Modulebene. Verschachtelung ist ein Werkzeug für Ausnahmefälle, kein Standardmittel für jede Gelegenheit.

Übungstipp für Azubis und Studenten

Nimm ein aktuelles Projekt von dir. Suche nach zwei Klassen, die stark voneinander abhängig sind (z.B. `Auto` und `Reifen` oder `Spieler` und `Inventar`).

  1. Versuche, die abhängige Klasse als innere Klasse der Hauptklasse zu definieren.

  2. Passe den Konstruktor (`__init__`) so an, dass die innere Klasse die Daten bekommt, die sie braucht.

  3. Teste, ob dein Code dadurch sauberer und leichter zu lesen wurde.

Die offizielle Python-Dokumentation zu Klassen liefert dir hierfür die perfekten theoretischen Grundlagen. Und falls du das Konzept der Vererbung bei solchen Strukturen prüfen musst, schau dir Python super() verstehen: Vererbung richtig nutzen an.

FAQ: Python verschachtelte Klassen

Können innere Klassen von äußeren Klassen erben?

Ja, das ist technisch möglich (`class Innen(Aussen):`). In der Praxis ist das aber extrem selten und führt oft zu verwirrender Architektur. Vermeide es, wenn möglich.

Werden innere Klassen kompiliert, wenn die äußere Klasse geladen wird?

Ja, wenn Python das Skript liest, definiert es die innere Klasse sofort, sobald der Code-Block der äußeren Klasse ausgeführt wird. Sie steht dann im Namensraum der äußeren Klasse zur Verfügung.

Haben andere Programmiersprachen das gleiche Verhalten?

Jein. In Java haben innere Klassen (non-static nested classes) standardmäßig eine versteckte Referenz auf das Eltern-Objekt und können dessen Variablen direkt lesen. In Python existiert diese Magie nicht - hier sind innere Klassen viel isolierter.

Kann ich auf die innere Klasse zugreifen, ohne ein Objekt der äußeren Klasse zu erstellen?

Ja. Solange du keine Instanzvariablen der äußeren Klasse dafür brauchst, kannst du die innere Klasse direkt über `AussenKlasse.InnenKlasse()` aufrufen.

Fazit

Python verschachtelte Klassen sind ein hervorragendes Werkzeug, um deinen Code aufzuräumen. Sie helfen dir, Hilfsklassen logisch an ihrem richtigen Ort zu platzieren und deinen Namensraum frei von unnötigem Datenmüll zu halten. Denk immer an die Matrjoschka-Puppe: Die innere Klasse existiert nur, um die äußere bei ihrer Arbeit zu unterstützen.

Bleib dran, probiere das Builder-Pattern in deinem nächsten Uni- oder Ausbildungsprojekt aus und schreibe sauberen Code.

Brauchst du Unterstützung bei deinen Programmieraufgaben? Egal ob Umschulung, Studium oder Berufseinstieg - bei study-it.education findest du erfahrene Tutoren, die dir genau da helfen, wo du feststeckst.


Matching tutoring

Want 1:1 help with this topic?

First chat · €0 · 30 min

Need someone to walk through this with you?

Instead of re-reading: 30 min with a senior dev.

Book a free first chat →
About the author
Marcel Schmidtpeter
Marcel Schmidtpeter

Stell dir vor, du entwickelst eine Software für einen Smart-Home-Server. Du hast eine Klasse `Haus`, die die gesamte Gebäude-Logik steuert. Jetzt brauchst du eine Datenstruktur für die Thermostat-Einstellungen. Diese Einstellungen werden nirgendwo anders im System verwendet, außer innerhalb eines `Haus`-Objekts. Genau hier kommen verschachtelte Klassen (engl. *nested classes*) ins Spiel. Egal, ob du dich gerade in deiner Umschulung zum Fachinformatiker, im Informatik-Studium oder in der...

marcel.schmidtpeter@study-it.education →
Keep reading

More reading