OOP Prinzipien Python: Die 4 Grundprinzipien einfach erklärt
Die vier OOP-Prinzipien Kapselung, Vererbung, Polymorphie und Abstraktion in Python verständlich erklärt – ideal für IT-Einsteiger aller Art.
Von Marcel Schmidtpeter 13. Aug. 2026
Stell dir vor, du entwickelst eine Software für eine Autowerkstatt. Du brauchst Klassen für verschiedene Fahrzeugtypen: PKW, LKW und Motorräder. Alle haben Gemeinsamkeiten wie Motor, Räder und eine Geschwindigkeit - aber sie verhalten sich unterschiedlich. Genau hier kommen die OOP Prinzipien Python ins Spiel: Sie helfen dir, Code zu schreiben, der wiederverwendbar, wartbar und logisch strukturiert ist.
Ob du gerade eine Umschulung machst, an der Uni Software Engineering belegst oder im ersten Job deine eigenen Module baust - wer objektorientierte Programmierung (OOP) nicht versteht, wird in der Praxis schnell an Grenzen stoßen.
Kernantwort: Die 4 Säulen der OOP sind Kapselung, Vererbung, Polymorphie und Abstraktion. Sie bilden das Fundament fast jeder modernen Software und helfen dir, komplexe Systeme in kleine, handhabbare Bausteine zu zerlegen.
Die 4 OOP-Prinzipien: Eine Übersicht
Die Objektorientierte Programmierung (OOP) ist ein Programmierparadigma (ein grundlegender Stil der Programmierung). Bei diesem Ansatz teilst du Software in Objekte auf. Jedes Objekt fasst Daten (Attribute) und das dazugehörige Verhalten (Methoden) zusammen.
Die vier Grundprinzipien sorgen dafür, dass dein Code sauber bleibt - egal ob du eine kleine App oder eine Unternehmenssoftware baust.
Prinzip | Worum geht es? | Typisches Keyword / Konzept in Python |
Kapselung (Encapsulation) | Daten vor direktem Zugriff schützen | `_` oder `__` als Präfix |
Vererbung (Inheritance) | Eigenschaften an Kind-Klassen weitergeben | `class Kind(Eltern):` |
Polymorphie (Polymorphism) | Gleiche Methode, unterschiedliches Verhalten | Methoden überschreiben |
Abstraktion (Abstraction) | Nur das Wesentliche zeigen, Details verstecken | `abc.ABC`, `@abstractmethod` |
Was ist Kapselung in Python?
Kapselung bedeutet: Du versteckst die inneren Daten eines Objekts vor der Außenwelt. Der Zugriff auf diese Daten läuft ausschließlich über definierte Methoden.
Stell dir einen Tresor vor. Du legst dein Geld nicht offen auf den Tisch, sondern schließt es weg. Wer etwas einlegen oder entnehmen will, muss die richtige Methode (den Schlüssel oder Code) dafür nutzen.
In Python gibt es - anders als in Java oder C# - kein echtes `private` Schlüsselwort. Stattdessen nutzt du Namenskonventionen:
`_variable` (ein Unterstrich): Signalisiert "bitte nicht direkt anfassen", ist aber technisch zugänglich. Man nennt das "protected".
`__variable` (zwei Unterstriche): Python nament diese Variable um (Name Mangling), sodass der direkte Zugriff erschwert wird. Das gilt als "private".
class Konto:
def __init__(self, inhaber, kontostand):
self.inhaber = inhaber
self.__kontostand = kontostand # "private" durch Name Mangling
def geld_abheben(self, betrag):
if betrag <= self.__kontostand:
self.__kontostand -= betrag
return f"{betrag} EUR abgehoben. Neu: {self.__kontostand} EUR"
return "Nicht genug Geld auf dem Konto"
# Verwendung
k = Konto("Max", 1000)
print(k.geld_abheben(200)) # Funktioniert
# print(k.__kontostand) # Fehler! AttributeErrorWichtig: Kapselung schützt deine Daten vor versehentlichen Veränderungen von außen. In Python ist das eher eine starke Konvention unter Entwicklern als ein echtes technisches Verbot.
Mehr zum Thema Kapselung und wie du sie sauber mit sogenannten Properties umsetzt, findest du in der offiziellen Python-Dokumentation zu Properties.
Was ist Vererbung in Python?
Vererbung bedeutet: Eine neue Klasse übernimmt die Attribute und Methoden einer bestehenden Klasse. Damit sparst du dir doppelten Code und förderst die Wiederverwendbarkeit.
Stell dir vor, du hast eine Basisklasse namens `Fahrzeug`. Davon erbst du `PKW` und `LKW`. Beide erben automatisch Eigenschaften wie `geschwindigkeit` oder `marke`, ohne dass du sie neu programmieren musst.
class Fahrzeug:
def __init__(self, marke, baujahr):
self.marke = marke
self.baujahr = baujahr
def starten(self):
return f"Das Fahrzeug {self.marke} startet."
class PKW(Fahrzeug): # PKW erbt von Fahrzeug
def __init__(self, marke, baujahr, tuev):
super().__init__(
marke, baujahr
) # Ruft den Konstruktor der Elternklasse auf
self.tuev = tuev
def starten(self):
return f"Der PKW {self.marke} brummt los."Best Practice: Vererbung baut immer eine "IST-EIN"-Beziehung auf. Ein PKW IST-EIN Fahrzeug. Wenn diese logische Regel nicht zutrifft, ist Vererbung oft das falsche Mittel.
Die `super()`-Funktion ist hier zentral - sie ruft die Methoden der Elternklasse auf. So musst du den Initialisierungs-Code nicht doppelt schreiben.
Was ist Polymorphie in Python?
Polymorphie (Vielgestaltigkeit) bedeutet: Verschiedene Klassen können Methoden mit exakt demselben Namen haben, die sich jedoch unterschiedlich verhalten.
Stell dir eine universelle Fernbedienung mit einem "Start"-Knopf vor. Ob du damit den Fernseher, die Stereoanlage oder die Spielkonsole startest - der Knopf ist immer gleich, aber das Gerät reagiert völlig unterschiedlich.
class Hund:
def macheGeraeusch(self):
return "Wuff!"
class Katze:
def macheGeraeusch(self):
return "Miau!"
class Auto:
def macheGeraeusch(self):
return "Vroom!"
def tier_oder_auto_erkennen(ding):
print(ding.macheGeraeusch())
# Polymorphie in Aktion
tiere_und_autos = [Hund(), Katze(), Auto()]
for ding in tiere_und_autos:
tier_oder_auto_erkennen(ding)Das Besondere in Python: Du brauchst keine gemeinsame Basisklasse oder ein striktes Interface. Python nutzt Duck Typing. Die Regel lautet: "Wenn es wie eine Ente quakt und wie eine Ente watschelt, ist es eine Ente." Solange ein Objekt die Methode `macheGeraeusch()` hat, funktioniert der Code.
Vorteil: Polymorphie macht deinen Code extrem flexibel. Du kannst später neue Klassen hinzufügen, ohne bestehenden Code (wie die Schleife im Beispiel) ändern zu müssen.
Was ist Abstraktion in Python?
Abstraktion bedeutet: Du zeigst nur die wesentlichen Details und versteckst die komplexe Implementierung. Der Nutzer einer Klasse muss nicht wissen, *wie* etwas funktioniert - nur, *was* es tut.
Stell dir deinen Kühlschrank vor. Du weißt, wie man ihn öffnet und Essen hineinstellt. Wie der Kompressor im Inneren genau gekühlt wird, musst du nicht wissen, um ihn zu nutzen.
In Python nutzt du dafür das Modul `abc` (Abstract Base Classes) und den Decorator `@abstractmethod`. Ein Decorator ist eine Funktion, die eine andere Funktion erweitert, ohne deren Code zu verändern.
from abc import ABC, abstractmethod
class Zahlungsmethode(ABC): # ABC = Abstract Base Class
@abstractmethod
def bezahlen(self, betrag):
pass # Keine Implementierung hier, nur der Vertrag
class Kreditkarte(Zahlungsmethode):
def bezahlen(self, betrag):
return f"Zahle {betrag} EUR mit Kreditkarte."
class PayPal(Zahlungsmethode):
def bezahlen(self, betrag):
return f"Zahle {betrag} EUR ueber PayPal."
# zahlung = Zahlungsmethode() # Fehler! Kann nicht instanziiert werden
karte = Kreditkarte()
print(karte.bezahlen(50)) # FunktioniertDu kannst von einer abstrakten Klasse keine direkten Objekte erzeugen. Jede Kind-Klasse muss alle abstrakten Methoden implementieren. Details dazu liefert die offizielle Python-Dokumentation zum abc-Modul.
Kernantwort: Abstraktion zwingt dich, klare Verträge zu definieren. Jede Unterklasse weiß genau, welche Methoden sie zwingend bereitstellen muss.
Alle 4 Prinzipien im Praxisbeispiel
Hier siehst du alle vier Prinzipien kombiniert in einem kleinen System für verschiedene Mitarbeiter-Typen.
from abc import ABC, abstractmethod
# --- ABSTRAKTION ---
class Mitarbeiter(ABC):
def __init__(self, name, gehalt):
self.name = name
self.__gehalt = gehalt # --- KAPSELUNG ---
def get_gehalt(self):
return self.__gehalt
@abstractmethod
def arbeit_beschreiben(self):
pass
# --- VERERBUNG ---
class Entwickler(Mitarbeiter):
def __init__(self, name, gehalt, sprache):
super().__init__(name, gehalt)
self.sprache = sprache
# --- POLYMORPHIE ---
def arbeit_beschreiben(self):
return f"{self.name} schreibt Code in {self.sprache}."
class Designer(Mitarbeiter):
def __init__(self, name, gehalt, tool):
super().__init__(name, gehalt)
self.tool = tool
def arbeit_beschreiben(self):
return f"{self.name} designt mit {self.tool}."
# Nutzung
team = [Entwickler("Anna", 4500, "Python"), Designer("Tom", 3800, "Figma")]
for mitarbeiter in team:
print(mitarbeiter.arbeit_beschreiben())
print(f"Gehalt: {mitarbeiter.get_gehalt()} EUR")Häufige Anfängerfehler
Zu tiefe Vererbungshierarchien
Anfänger vererben oft über vier oder fünf Ebenen (`A -> B -> C -> D -> E`). Das macht Code unwartbar und fehleranfällig.
Die Lösung: Halte Vererbungshierarchien flach (maximal zwei bis drei Ebenen). Eine Änderung in der obersten Klasse beeinflusst sonst alle Unterklassen. Nutze stattdessen eher Komposition (das Zusammenstecken von Klassen).
Kapselung ignorieren
# FALSCH: Alles ist oeffentlich
class User:
def __init__(self, name):
self.passwort = "1234" # Frei aenderbar fuer alle!
# BESSER: Daten kapseln
class User:
def __init__(self, name):
self.__passwort = "1234" # Geschuetzt vor direktem ZugriffAbstraktion ohne Plan
Manchmal definieren Azubis oder Studenten abstrakte Basisklassen, die nur eine einzige Methode haben und von nur einer einzigen Klasse beerbt werden. Das ist Overengineering (zu komplex gebaut). Abstraktion lohnt sich erst, wenn du mehrere Unterklassen hast, die denselben Vertrag erfüllen müssen.
Übungstipp: Baue ein eigenes Tier-Minispiel
Nimm dir 30 Minuten Zeit und baue ein kleines System selbst:
Erstelle eine abstrakte Basisklasse `Tier` mit der Methode `bewegen()`.
Leite davon mindestens drei Klassen ab (`Fisch`, `Vogel`, `Saeugetier`).
Jedes Tier soll sich unterschiedlich bewegen ("schwimmt", "fliegt", "laeuft").
Kapsele das Attribut `gewicht` und ermögliche nur Lesezugriff über eine Methode.
Wenn du das fehlerfrei hinbekommst, hast du die praktische Anwendung der OOP verstanden.
FAQ: OOP Prinzipien Python
Was sind die 4 Säulen der OOP in Python?
Die vier Säulen sind Kapselung, Vererbung, Polymorphie und Abstraktion. Sie helfen dabei, Code wiederverwendbar, wartbar und logisch verständlich zu strukturieren.
Hat Python echtes `private`?
Nein. Python nutzt Name Mangling (mit doppeltem Unterstrich `__`) und Konventionen (mit einfachem Unterstrich `_`), um Kapselung zu simulieren. Es gibt kein striktes Zugriffsverbot wie in Java oder C#.
Brauche ich in Python Interfaces?
Python hat keine Interfaces im klassischen Sinn wie Java. Stattdessen nutzt du Abstract Base Classes (`abc`-Modul) oder verlässt dich im Alltag auf Duck Typing. Beides hat seine Daseinsberechtigung.
Was ist der Unterschied zwischen Abstraktion und Kapselung?
Kapselung versteckt konkrete Daten (das "Wie" der Speicherung im Hintergrund). Abstraktion versteckt komplexe Implementierungsdetails und definiert nur das "Was" - also, welche Methoden vorhanden sein müssen.
Wann sollte ich Vererbung statt Komposition nutzen?
Vererbung nutzt du bei "IST-EIN"-Beziehungen (ein Hund ist ein Tier). Komposition nutzt du bei "HAT-EIN"-Beziehungen (ein Auto hat einen Motor). In der modernen Softwareentwicklung wird oft Komposition bevorzugt, da sie flexibler ist.
Fazit
Die vier OOP Prinzipien Python sind kein theoretischer Luxus für die Uni. Sie sind praktische Werkzeuge, die dir das Programmier-Leben im Job massiv erleichtern. Wer Kapselung, Vererbung, Polymorphie und Abstraktion sicher anwendet, schreibt robusteren, fehlerfreieren und verständlicheren Code.
Zusammenfassung: Nutze Vererbung für "IST-EIN"-Strukturen, Kapselung für Datenschutz, Polymorphie für Flexibilität und Abstraktion für klare Verträge zwischen Klassen.
Wenn du bei OOP-Konzepten, UML-Diagrammen oder Python-Grundlagen Unterstützung brauchst, musst du das nicht alleine lösen. Bei study-it.education findest du erfahrene Nachhilfelehrer, die dir genau dort helfen, wo du gerade festhängst.
1:1-Hilfe zu diesem Thema?
Brauchst du jemand, der das mit dir durchgeht?
Statt nochmal lesen: 30 min mit einem Senior-Dev.
Kostenloses Erstgespräch buchen →
Die vier OOP-Prinzipien Kapselung, Vererbung, Polymorphie und Abstraktion in Python verständlich erklärt – ideal für IT-Einsteiger aller Art.
marcel.schmidtpeter@study-it.education →Mehr Lesestoff
Python None Optional: None-Werte sicher behandeln – einfach erklärt
None-Werte sicher behandeln: Erfahre, wie Optional und Typannotationen in Python funktionieren und wie du typische None-Fehler vermeidest.
Python List Comprehension map filter: Einfach erklärt mit Beispielen
List Comprehensions, map und filter im Vergleich: So filterst und transformierst du Daten in Python – mit anschaulichen Beispielen für den Einstieg.
Python Typannotationen und Generics einfach erklärt
Typannotationen und Generics in Python erklärt: So nutzt du Type Hints für lesbaren, wartbaren Code – mit Beispielen für Einsteiger.