class ·
__init__ / self ·
Vererbung ·
Polymorphie ·
Dunder-Methoden ·
@property
Objektorientierte Programmierung in Python ermöglicht die Strukturierung von Code durch Klassen, Vererbung und Polymorphie. Diese Konzepte sind die Grundlage für saubere, wiederverwendbare und erweiterbare Software.
Klassen sind Blaupausen für Objekte. Der Konstruktor __init__() initialisiert die Attribute, self verweist auf die aktuelle Instanz.
| Konzept | Beschreibung |
|---|---|
| class | Definiert eine neue Klasse (Blaupause) |
| __init__ | Konstruktor – wird beim Erstellen aufgerufen |
| self | Verweis auf die aktuelle Instanz (ähnlich this) |
| object | Instanz einer Klasse |
| Attribute | Daten, die zur Klasse gehören (self.name) |
| Methoden | Funktionen, die zur Klasse gehören |
self sein (auch wenn Sie ihn nicht verwenden). Er wird automatisch übergeben und referenziert die aktuelle Instanz.
__init__ ist der Konstruktor, der automatisch aufgerufen wird, wenn ein Objekt erstellt wird. self ist die Referenz auf die aktuelle Instanz.
| Konzept | Beschreibung |
|---|---|
| __init__ | Konstruktor – wird bei der Instanzerstellung aufgerufen |
| self | Referenz auf die Instanz (für Attribute und Methoden) |
| Instanzattribute | Attribute, die pro Instanz definiert werden (self.attr) |
| Klassenattribute | Attribute, die für alle Instanzen gleich sind (direkt in der Klasse) |
Vererbung ermöglicht es, eine neue Klasse auf Basis einer bestehenden zu definieren. Die Kindklasse erbt alle Attribute und Methoden der Elternklasse.
| Konzept | Beschreibung |
|---|---|
| class Child(Parent) | Vererbung von Parent |
| super() | Ruft Methode der Elternklasse auf |
| Methoden überschreiben | Kindklasse definiert eigene Methode |
| isinstance() | Prüft, ob Objekt zur Klasse gehört |
| issubclass() | Prüft, ob Klasse von anderer erbt |
super() rufen Sie die Methode der Elternklasse auf – das ist besonders nützlich im Konstruktor, wenn Sie die Initialisierung der Elternklasse nicht selbst neu schreiben möchten.
Polymorphie bedeutet, dass verschiedene Klassen die gleiche Methode implementieren, aber unterschiedliches Verhalten zeigen. Python unterstützt dies durch Methoden-Überschreibung und Duck-Typing.
| Konzept | Beschreibung |
|---|---|
| Überschreibung | Kindklasse definiert eigene Methodenimplementierung |
| Duck-Typing | "Wenn es wie eine Ente läuft und quakt..." – Typ wird nicht geprüft, nur Verhalten |
| Abstrakte Klassen | ABC-Modul für obligatorische Methoden (nicht explizit gezeigt) |
| Liskov-Substitution | Instanz der Kindklasse kann überall verwendet werden, wo die Elternklasse erwartet wird |
Dunder-Methoden (Double UNDERscore) sind spezielle Methoden, die von Python automatisch aufgerufen werden – z.B. bei print(), len() oder Operatoren.
| Methode | Beschreibung |
|---|---|
| __str__ | String-Repräsentation für Benutzer (print()) |
| __repr__ | String-Repräsentation für Entwickler (debug) |
| __len__ | Länge für len() |
| __add__ | Addition (+) |
| __eq__ | Gleichheit (==) |
| __lt__ | Kleiner als (<) für Sortierung |
| __call__ | Objekt wie eine Funktion aufrufen |
| __enter__ / __exit__ | Context Manager (with Statement) |
__str__ und __repr__ implementieren – __str__ für die Benutzer, __repr__ für die Debug-Ausgabe (oft reicht __repr__ = __str__).
@property ermöglicht den Zugriff auf Attribute wie auf eine Variable, aber mit Kontrolle (Validierung, Berechnung). Setter und Deleter erlauben zusätzliche Logik.
@property, um den direkten Zugriff auf Attribute zu kontrollieren – z.B. für Validierung, Formatierung oder Berechnung von Werten.
class
__init__
Vererbung
Polymorphie
__str__
@property
class Person: def __init__(self, name): self.name = name ·
class Student(Person): ...