Python, eine hochentwickelte, interpretierte und interaktive Programmiersprache, war ein wesentlicher Treiber für das exponentielle Wachstum der Bereiche Datenwissenschaft und maschinelles Lernen. Dieser Artikel bietet eine eingehende Analyse eines der grundlegenden Konzepte von Python, der Vererbung, die ein zentrales Merkmal der objektorientierten Programmierung (OOP) ist. Am Ende des Artikels erhalten Sie ein Verständnis für die Verwendung der Vererbung in Python und erhalten relevante Beispiele zur Verfestigung des Konzepts.
Was ist objektorientierte Programmierung?
Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das auf dem Konzept von „Objekten“ basiert, die Daten und Code enthalten können: Daten in Form von Feldern (häufig als Attribute bezeichnet) und Code in Form von Prozeduren (häufig sogenannte Methoden). OOP erleichtert die Strukturierung und Wartung komplexer Softwaresysteme, indem es Modularität und Wiederverwendbarkeit des Codes ermöglicht.
![Python Vererbung](https://code-lernen.de/wp-content/uploads/2023/08/Python-Vererbung-.jpeg)
Vererbung in Python
Vererbung ist neben Kapselung, Polymorphismus und Abstraktion eines der vier Hauptkonzepte von OOP. Vereinfacht ausgedrückt ermöglicht die Vererbung, dass neue Objekte die Eigenschaften vorhandener Objekte übernehmen. Betrachten Sie ein Beispiel aus der Praxis: Ein Kind erbt bestimmte Eigenschaften von seinen Eltern. In ähnlicher Weise kann in der Programmierung eine untergeordnete Klasse (auch als Unterklasse bezeichnet) Attribute und Methoden von einer übergeordneten Klasse (auch als Oberklasse bezeichnet) erben.
Python unterstützt OOP und damit auch die Vererbung vollständig. Eine untergeordnete Klasse erbt alle Attribute und Methoden von der übergeordneten Klasse, indem sie bei der Definition der untergeordneten Klasse die übergeordnete Klasse in Klammern deklariert. Die Syntax ist einfach:
class ChildClass(ParentClass):
pass
Hier wird „pass“ verwendet, wenn der untergeordneten Klasse keine zusätzlichen Eigenschaften oder Methoden hinzugefügt werden. Es erstellt einfach eine Klasse mit den Eigenschaften und Methoden der übergeordneten Klasse.
Arten der Vererbung in Python
Python unterstützt verschiedene Arten der Vererbung, darunter:
Einzelvererbung: Wenn eine Klasse von einer einzelnen übergeordneten Klasse erbt.
class Elternteil:
pass
class Kind(Elternteil):
pass
Mehrfachvererbung: Wenn eine Klasse von mehr als einer übergeordneten Klasse erbt.
class Elternteil1:
pass
class Elternteil2:
pass
class Kind(Elternteil1, Elternteil2):
pass
Mehrstufige Vererbung: Wenn eine Klasse von einer übergeordneten Klasse erbt und eine andere Klasse von dieser untergeordneten Klasse erbt, wird eine „Enkelklasse“ erstellt.
class Großelternteil:
pass
class Elternteil(Großelternteil):
pass
class Kind(Elternteil):
pass
Hierarchische Vererbung: Wenn eine Klasse als Oberklasse für mehr als eine Unterklasse dient.
class Elternteil:
pass
class Kind1(Elternteil):
pass
class Kind2(Elternteil):
pass
Hybride Vererbung: Eine Mischung aus mehrfacher und mehrstufiger Vererbung. Es ist etwas komplexer und erfordert eine sorgfältige Gestaltung, um potenzielle Probleme wie das Diamantenproblem zu vermeiden.
Die „Super“-Funktion in Python
Die Funktion super() in Python wird zum Aufrufen von Methoden aus übergeordneten Klassen verwendet. Dies ist besonders nützlich, wenn Sie eine Methode einer übergeordneten Klasse innerhalb einer untergeordneten Klasse verwenden müssen, die Methode jedoch in der untergeordneten Klasse überschrieben wurde. Hier ist ein Beispiel:
class Elternteil:
def grüßen(self):
print("Hallo von den Eltern")
class Kind(Elternteil):
def grüßen(self):
super().grüßen()
print("Hallo vom Kind")
kind = Kind()
kind.grüßen()
Ausgang:
Hallo von den Eltern
Hallo vom Kind
Methodenüberschreibung in Python
Das Überschreiben von Methoden erfolgt, wenn eine untergeordnete Klasse eine Methode mit demselben Namen wie eine Methode in ihrer übergeordneten Klasse hat. Wenn in Python die Methode von einem Objekt der untergeordneten Klasse aufgerufen wird, wird die Methode des untergeordneten Elements anstelle der Methode des übergeordneten Elements ausgeführt. Dies ist eine leistungsstarke Funktion, mit der der Programmierer das Verhalten einer Methode in der untergeordneten Klasse ändern kann.
Pythons integrierte Vererbungsfunktionen
Python bietet integrierte Funktionen zum Arbeiten mit Vererbung:
- isinstance(): prüft, ob ein Objekt eine Instanz einer bestimmten Klasse oder ein Tupel von Klassen ist.
- issubclass(): prüft, ob eine Klasse eine Unterklasse einer anderen Klasse oder ein Tupel von Klassen ist.
Hier ist ein Beispiel für die Verwendung dieser Funktionen:
class Elternteil:
pass
class Kind(Elternteil):
pass
kind = Kind()
print(isinstance(kind, Kind)) # Returns: True
print(isinstance(kind, Elternteil)) # Returns: True
print(issubclass(Kind, Elternteil)) # Returns: True
Best Practices und häufige Fehler bei der Vererbung
Während die Vererbung die Wiederverwendbarkeit und Lesbarkeit des Codes fördert, kann sie bei unsachgemäßer Verwendung auch zu Problemen führen. Es ist wichtig, tiefe Vererbungshierarchien zu vermeiden, bei denen eine untergeordnete Klasse von einer übergeordneten Klasse erbt, diese wiederum von einer anderen übergeordneten Klasse und so weiter. Diese tiefen Hierarchien können das Lesen und Debuggen von Code erschweren.
Denken Sie auch an das Liskov-Substitutionsprinzip (LSP): Eine untergeordnete Klasse sollte für ihre übergeordnete Klasse ersetzbar sein, was bedeutet, dass eine untergeordnete Klasse die Funktionalität verbessern, sie jedoch nicht verringern sollte.
Abschluss
Vererbung ist ein grundlegendes Konzept in Python, das es Programmierern ermöglicht, Beziehungen zwischen Klassen herzustellen und die Wiederverwendbarkeit und Kapselung von Code zu fördern. Wenn Sie die Vererbung verstehen, können Sie Ihre Python-Programme effizienter strukturieren und entwickeln.