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

UML Klassendiagramm Python: Erstellen & Verstehen für Einsteiger

Lerne, wie du UML-Klassendiagramme für Python-Projekte erstellst und liest. Der praktische Guide für Azubis, Studenten und Berufseinsteiger in der IT.

Marcel Schmidtpeter By Marcel Schmidtpeter 10 Aug 2026
UML Klassendiagramm Python: Erstellen & Verstehen für Einsteiger

Stell dir vor, du startest dein erstes größeres Python-Projekt in der Berufsschule, im Studium oder im neuen Job. Du hast eine Idee im Kopf, aber plötzlich stehst du vor 15 Klassen, die alle miteinander verbunden sind. Genau hier rettet dich ein UML-Klassendiagramm. Es ist wie eine Landkarte für deinen Code - du siehst sofort, welche Klasse was macht und wie sie zusammenhängt. Wer ein UML-Klassendiagramm für Python beherrscht, spart sich Stunden beim Debuggen und plant Architektur wie ein Profi.

Was ist ein UML-Klassendiagramm?

Ein UML-Klassendiagramm (Unified Modeling Language) ist eine standardisierte grafische Darstellung von Klassen und deren Beziehungen in der objektorientierten Programmierung. Es zeigt Attribute (Eigenschaften) und Methoden (Funktionen) einer Klasse in einer Box und visualisiert Verbindungen zu anderen Klassen. Die offizielle UML-Spezifikation der OMG definiert die Regeln für diese Diagramme.

Kernidee: Ein UML-Klassendiagramm ist der Bauplan deines Codes, bevor du auch nur eine Zeile Python schreibst.

Stell dir vor, du baust ein Haus. Du würdest nicht einfach anfangen, Steine aufeinander zu legen. Du brauchst einen Grundriss. Das UML-Klassendiagramm ist genau dieser Grundriss für deine Software - und mit Python setzt du diesen Plan direkt in lauffähigen Code um.

Wie liest du ein UML-Klassendiagramm für Python?

Jedes UML-Klassendiagramm besteht aus rechteckigen Boxen, die in drei Bereiche unterteilt sind: Klassenname (oben), Attribute (Mitte) und Methoden (unten). Die Sichtbarkeit von Attributen und Methoden wird durch Symbole gekennzeichnet - und hier gibt es wichtige Besonderheiten bei Python.

Die Bestandteile einer Klasse im Detail

Jede Klasse im Diagramm folgt diesem Aufbau:

Symbol

Bedeutung in UML

Entsprechung in Python

`+`

Public (öffentlich)

Normale Attribute/Methoden

`-`

Private (privat)

`__name` (Name Mangling)

`#`

Protected (geschützt)

Konvention: `_name`

Unterstrich

Static (Klassenebene)

`@staticmethod`

Wichtig: Python hat keinen echten Zugriffschutz wie Java oder C#. Die Unterstriche sind Konventionen, die anderen Entwicklern signalisieren: "Bitte hier nicht direkt zugreifen!" Ein `_` ist eine höfliche Warnung, ein `__` (Double-Underscore) aktiviert Name Mangling und erschwert den direkten Zugriff zusätzlich.

Hier ein Beispiel in UML und Python:

python
class Auto:
    def __init__(self, marke, baujahr):
        self._marke = marke
        self.__baujahr = baujahr

    def starten(self):
        print(f"Das Auto {self._marke} startet.")

    @staticmethod
    def anzahl_raeder():
        return 4

Das dazugehörige UML-Klassendiagramm sieht so aus:

text
+------------------------------+
|            Auto              |
+------------------------------+
| # _marke: String             |
| - __baujahr: int             |
+------------------------------+
| + starten(): void            |
| + anzahl_raeder(): int       |
+------------------------------+

Welche Beziehungstypen gibt es im UML-Klassendiagramm?

Die wahre Stärke von UML liegt nicht in einzelnen Klassen, sondern in deren Beziehungen zueinander. Diese Verbindungen zeigen, wie Klassen interagieren und voneinander abhängen. Für Python-Projekte sind vor allem drei Typen wichtig.

Vererbung (Inheritance)

Vererbung bedeutet, dass eine Klasse alle Eigenschaften und Methoden einer anderen Klasse erbt. In UML wird sie durch einen Pfeil mit leerer Dreiecksspitze dargestellt, der vom Kind zur Elternklasse zeigt.

python
class Tier:
    def __init__(self, name):
        self.name = name

    def atmen(self):
        print(f"{self.name} atmet.")


class Hund(Tier):
    def bellen(self):
        print(f"{self.name} bellt!")

Faustregel: Nutze Vererbung nur für "IST-EIN"-Beziehungen. Ein Hund IST ein Tier - aber ein Motor IST kein Auto.

Mehr zur Vererbung findest du in unserem Artikel über Python super().

Assoziation und Aggregation

Eine Assoziation ist eine lose "kennt"-Beziehung zwischen zwei Klassen. Eine Aggregation (leere Raute) ist stärker: Sie bedeutet "besteht aus", aber die Teile können auch allein existieren.

Beispiel: Ein Auto hat Räder, aber die Räder können auch ohne das Auto weiterexistieren.

python
class Rad:
    def __init__(self, groesse):
        self.groesse = groesse


class Auto:
    def __init__(self):
        self.raeder = [Rad(17), Rad(17), Rad(17), Rad(17)]

Komposition

Eine Komposition (ausgefüllte Raute) ist die stärkste Form der Beziehung. Wenn das Hauptobjekt zerstört wird, werden auch die Teilobjekte gelöscht. Ohne das Ganze gibt es die Teile nicht.

Stell dir ein Haus und seine Zimmer vor. Ohne das Haus gibt es keine Zimmer.

python
class Zimmer:
    def __init__(self, name):
        self.name = name


class Haus:
    def __init__(self):
        self.zimmer = [Zimmer("Wohnzimmer"), Zimmer("Schlafzimmer")]

Beziehung

Symbol

Bedeutung

Beispiel

Vererbung

Pfeil mit Dreieck

"ist ein"

Hund → Tier

Assoziation

Einfache Linie

"kennt"

Lehrer - Schueler

Aggregation

Leere Raute

"hat" (Teil unabhängig)

Auto ◇ - Rad

Komposition

Gefüllte Raute

"besteht aus" (Teil abhängig)

Haus ♦ - Zimmer

Wie setzt du ein UML-Klassendiagramm in Python-Code um?

Jetzt schauen wir uns ein vollständiges Beispiel an, das alle Konzepte vereint. Wir bauen ein kleines Bibliothekssystem mit Vererbung und Komposition. Das Python-Tutorial zu Klassen der offiziellen Python-Doku liefert dir die nötigen Grundlagen dazu.

Das UML-Diagramm sieht vereinfacht so aus:

text
Buch "1" o-- "0..*" Exemplar : hat
Roman --|> Buch : erbt

So setzt du es in Python um:

python
class Buch:
    def __init__(self, titel, autor):
        self.titel = titel
        self.autor = autor
        self.exemplare = []

    def exemplar_hinzufuegen(self, exemplar):
        self.exemplare.append(exemplar)


class Exemplar:
    def __init__(self, inventarnummer, zustand="neu"):
        self.inventarnummer = inventarnummer
        self.zustand = zustand


class Roman(Buch):
    def __init__(self, titel, autor, genre):
        super().__init__(titel, autor)
        self.genre = genre


# Nutzung
mein_roman = Roman("1984", "George Orwell", "Dystopie")
ex1 = Exemplar("INV-001")
mein_roman.exemplar_hinzufuegen(ex1)

print(f"Buch: {mein_roman.titel} von {mein_roman.autor}")
print(f"Exemplare: {len(mein_roman.exemplare)}")

Warum ist dieser Code sauber? Weil jede Klasse eine klare, einzige Verantwortung hat. Das nennt man das Single Responsibility Principle (SRP). Ein Klassendiagramm zwingt dich, diese Struktur VOR dem Coden zu durchdenken - und genau das unterscheidet Hobby-Code von professioneller Software.

Wie erstellst du ein UML-Klassendiagramm?

Du kannst UML-Diagramme von Hand zeichnen oder Tools nutzen. Für Einsteiger empfehle ich PlantUML, weil es textbasiert funktioniert und direkt in vielen IDEs läuft.

So sieht PlantUML für unser Bibliotheksbeispiel aus:

text
@startuml
class Buch {
  + titel: String
  + autor: String
  + exemplare: List
  + exemplar_hinzufuegen(exemplar): void
}

class Exemplar {
  + inventarnummer: String
  + zustand: String
}

class Roman {
  + genre: String
}

Buch "1" -- "0..*" Exemplar : hat >
Roman --|> Buch

@enduml

Tipp: Alternativen zu PlantUML sind draw.io für grafisches Ziehen mit der Maus oder Mermaid, das direkt in GitHub- und GitLab-READMEs gerendert wird.

Welche Fehler machen Anfänger bei UML-Klassendiagrammen?

Drei Fehler sehen ich immer wieder - bei Azubis, Studenten und Berufseinsteigern.

Fehler 1: Zu viele Details abbilden

Ein Klassendiagramm soll die Architektur zeigen, nicht jeden Getter und Setter. Wenn du 50 Methoden in einer Box stehen hast, verlierst du den Überblick - und niemand liest das Diagramm freiwillig.

Richtig: Nur die wichtigsten öffentlichen Methoden und Schlüsselattribute eintragen. Getter und Setter kann man sich denken.

Fehler 2: Beziehungstypen verwechseln

Anfänger nutzen oft überall Vererbung, wenn eigentlich eine Aggregation gemeint ist. Das führt zu unnötig komplexen Klassenhierarchien, die schwer zu warten sind.

Falsch: `class Motor(Auto)` - ein Motor IST kein Auto.

Richtig: Aggregation - ein Auto HAT einen Motor.

python
# Falsch: Motor erbt von Auto
class Motor(Auto):
    pass


# Richtig: Auto hat einen Motor (Aggregation)
class Motor:
    def __init__(self, leistung):
        self.leistung = leistung


class Auto:
    def __init__(self, motor):
        self.motor = motor

Fehler 3: UML als Zwang sehen

UML ist ein Werkzeug, kein Gesetz. Wenn du im Laufe des Projekts merkst, dass deine Struktur nicht optimal ist, passe das Diagramm an.

Merke: Das Diagramm dient dem Code, nicht umgekehrt. Aktualisiere es, wenn sich deine Architektur entwickelt - nicht nur einmal am Anfang.

Wie kannst du UML-Klassendiagramme üben?

Nimm ein Projekt aus deinem Alltag: eine Pizza-Bestell-App, eine ToDo-Liste oder ein Bibliothekssystem. Zeichne zuerst das Diagramm auf Papier, dann code es in Python. So trainierst du das Denken in Strukturen.

Profi-Tipp: Das Zeichnen mit Stift und Papier prägt dir die Konzepte besser ein, als direkt ein Tool zu nutzen. Erst wenn der Entwurf steht, überträgst du ihn in PlantUML oder Mermaid.

FAQ: Häufige Fragen zu UML-Klassendiagrammen und Python

Kann Python UML direkt generieren?

Ja, mit Pyreverse (Teil von Pylint) erstellst du aus vorhandenem Python-Code automatisch UML-Diagramme. Der Aufruf lautet `pyreverse -o png mein_modul.py`. Das ist praktisch, wenn du fremden Code verstehen musst.

Brauche ich als Python-Entwickler wirklich UML?

In kleinen Projekten (unter 5 Klassen) reicht oft ein Whiteboard. In professionellen Teams, im Studium oder bei Abschlussarbeiten wird UML aber erwartet. Es hilft dir, deine Gedanken zu strukturieren und komplexe Zusammenhänge verständlich zu erklären.

Was bedeutet die Zahl an den Verbindungslinien?

Das ist die Multiplizität. Sie gibt an, wie viele Objekte miteinander verbunden sein können.

Angabe

Bedeutung

`1`

Genau ein Objekt

`0..1`

Null oder ein Objekt

`*`

Beliebig viele

`0..*`

Null bis beliebig viele

`1..*`

Mindestens eins

Beispiel: Ein Buch (1) hat mehrere Exemplare (0..*).

Ist UML nur für Python?

Nein, UML ist sprachunabhängig. Du kannst dasselbe Diagramm in Python, Java oder C# umsetzen. Die Konzepte der Objektorientierung sind universell - nur die Syntax unterscheidet sich.

Gibt es Alternativen zu UML-Klassendiagrammen?

Für dynamische Abläufe gibt es andere UML-Diagrammtypen wie Sequenzdiagramme (wer ruft wann wen?) oder Aktivitätsdiagramme (welcher Prozess läuft ab?). CRC-Karten (Class-Responsibility-Collaboration) sind eine leichtgewichtige Alternative für den Anfang.

Fazit

Ein UML-Klassendiagramm für Python ist nicht nur ein akademisches Werkzeug, das du in der Prüfung brauchst. Es ist dein bester Freund, wenn du komplexe Projekte planen und kommunizieren willst. Egal ob in der Ausbildung, im Studium oder im ersten Job - die Fähigkeit, Code-Architektur zu strukturieren, unterscheidet Anfänger von Profis.

Starte einfach: Nimm dein nächstes Projekt, zeichne ein Diagramm auf Papier und code es danach in Python. Du wirst überrascht sein, wie viel klarer deine Architektur wird.

Brauchst du Hilfe bei Python-Projekten, OOP-Konzepten oder der Vorbereitung auf deine IHK-Prüfung? Bei study-it.education findest du erfahrene Nachhilfelehrer, die dich genau da abholen, wo du stehst. Schau vorbei und buche deine erste Session!


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

Lerne, wie du UML-Klassendiagramme für Python-Projekte erstellst und liest. Der praktische Guide für Azubis, Studenten und Berufseinsteiger in der IT.

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

More reading