Python - Vererbung
Was ist Vererbung in Python?
Vererbung ist ein grundlegendes Konzept in der objektorientierten Programmierung (OOP), das es einer Klasse ermöglicht, die Eigenschaften und Methoden einer anderen Klasse zu erben. Dies ermöglicht die Wiederverwendbarkeit und Modularität des Codes, da Sie neue Klassen auf Basis bestehender Klassen erstellen können, ohne den selben Code erneut schreiben zu müssen. In Python wird die Vererbung durch die Verwendung des class
-Schlüsselworts gefolgt vom Namen der Elternklasse in Klammern implementiert.
Erstellen einer Elternklasse
Beginnen wir mit dem Erstellen einer einfachen Elternklasse namens Animal
:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subklasse muss diese Methode implementieren")
In diesem Beispiel definieren wir eine Animal
-Klasse mit einer __init__
-Methode, die das name
-Attribut initialisiert, und einer speak
-Methode, die einen NotImplementedError
auslöst. Dieser Fehler wird ausgelöst, wenn die Subklasse keine eigene Implementierung der speak
-Methode bereitstellt.
Erstellen einer Kindklasse
Jetzt erstellen wir eine Kindklasse namens Dog
, die von der Animal
-Klasse erbt:
class Dog(Animal):
def speak(self):
return f"{self.name} sagt Wuff!"
Die Dog
-Klasse erbt alle Attribute und Methoden der Animal
-Klasse, bietet aber ihre eigene Implementierung der speak
-Methode an. Wenn wir eine Instanz der Dog
-Klasse erstellen und deren speak
-Methode aufrufen, wird sie [Name des Hundes] sagt Wuff!
zurückgeben, anstatt einen Fehler auszulösen.
mein_hund = Dog("Buddy")
print(mein_hund.speak()) # Ausgabe: Buddy sagt Wuff!
Arten der Vererbung
Es gibt drei Arten der Vererbung in Python: einfache Vererbung, multiple Vererbung, mehrstufige Vererbung und hierarchische Vererbung. Wir werden jede Art im Detail untersuchen.
Python - Einfache Vererbung
Die einfache Vererbung ist die häufigste Form der Vererbung, bei der eine Klasse von nur einer Elternklasse erbt. Wie wir oben gesehen haben, erbt die Dog
-Klasse von der Animal
-Klasse, was ein Beispiel für einfache Vererbung ist.
Python - Multiple Vererbung
Multiple Vererbung ist das Erben einer Klasse von mehreren Elternklassen. Python unterstützt jedoch keine multiple Vererbung direkt durch die Syntax der Klassendefinition. Stattdessen verwendet es eine Technik namens "Mixins" oder "Schnittstellen", um multiple Vererbung zu erreichen.
Methodeauflösungsreihenfolge (MRO)
Python verwendet den C3-Linearisierungsalgorithmus, um die Reihenfolge zu bestimmen, in der Basisklassen gesucht werden, wenn nach einer Methode gesucht wird. Die MRO stellt sicher, dass jede Klasse höchstens einmal in der Methodeauflösungsreihenfolge appears und erhält die Reihenfolge der Basisklassen so, wie sie in der Klassendefinition angegeben wurden.
Python - Mehrstufige Vererbung
Mehrstufige Vererbung tritt ein, wenn eine Klasse von einer Subklasse erbt und eine Hierarchie von Klassen bildet. Hier ist ein Beispiel:
class Mammal(Animal):
pass
class Cat(Mammal):
def speak(self):
return f"{self.name} sagt Miau!"
In diesem Fall erbt die Cat
-Klasse von der Mammal
-Klasse, die ihrerseits von der Animal
-Klasse erbt. Dies bildet eine mehrstufige Vererbungshierarchie.
Python - Hierarchische Vererbung
Hierarchische Vererbung beinhaltet mehrere Subklassen, die von einer einzigen Superklasse erben. Zum Beispiel:
class Reptile(Animal):
pass
class Snake(Reptile):
def speak(self):
return f"{self.name} sagt Zischen!"
class Lizard(Reptile):
def speak(self):
return f"{self.name} sagt Kriechen!"
In diesem Fall erben sowohl die Snake
- als auch die Lizard
-Klassen von der Reptile
-Klasse, die ihrerseits von der Animal
-Klasse erbt. Dies bildet eine hierarchische Vererbungsstruktur.
Python - Hybride Vererbung
Hybride Vererbung kombiniert Merkmale der multiple Vererbung und anderer Arten der Vererbung. Es wird nicht direkt von Python unterstützt, kann jedoch durch die Verwendung von Mixins oder durch die Kombination verschiedener Vererbungsarten erreicht werden.
Die super() Funktion
Die super()
-Funktion wird verwendet, um Methoden aus der Elternklasse innerhalb der Subklasse aufzurufen. Sie ist besonders nützlich, wenn Sie eine Methode aus der Elternklasse erweitern oder überschreiben möchten, während Sie noch einige ihrer Funktionalität beibehalten möchten. Hier ist ein Beispiel:
class Bird(Animal):
def __init__(self, name, spannweite):
super().__init__(name)
self.spannweite = spannweite
def speak(self):
return f"{self.name} sagt Zwitschern!"
In diesem Fall erbt die Bird
-Klasse von der Animal
-Klasse und verwendet die super()
-Funktion, um die __init__
-Methode der Elternklasse aufzurufen. Dies stellt sicher, dass das name
-Attribut richtig initialisiert wird. Zusätzlich bietet die Bird
-Klasse ihre eigene Implementierung der speak
-Methode an.
mein_vogel = Bird("Tweety", 10)
print(mein_vogel.speak()) # Ausgabe: Tweety sagt Zwitschern!
Durch die Verwendung der Vererbung können Sie mehr spezialisierte Klassen erstellen, die die Funktionalität ihrer Elternklassen erben und erweitern, wodurch die Wiederverwendbarkeit und Organisation des Codes gefördert wird. Bedenken Sie, dass Vererbung nur ein Aspekt der OOP ist, und es gibt andere Konzepte wie Polymorphismus, Encapsulation und Abstraktion, die ebenfalls eine entscheidende Rolle bei der Gestaltung robust und wartbarer Softwaresysteme spielen.
Credits: Image by storyset