Vererbung ist eines der Kernprinzipien der objektorientierten Programmierung (OOP). Sie ermöglicht, dass eine Kindklasse (auch “abgeleitete” oder “Unterklasse” genannt) Methoden und Attribute von einer Elternklasse (auch “Super- oder “Basisklasse” genannt) erben kann. Mit anderen Worten, eine Unterklasse erbt die Funktionalität ihrer Basisklasse und kann diese erweitern oder überschreiben.
In Python wird die Vererbung durch die Definition einer Klasse mit einer oder mehreren Basisklassen in den Klammern nach dem Klassennamen erreicht:
```python
class Cat(Animal):
def speak(self):
return “Miau“
```
Basisklassen können Initialisierungen und Methoden bereitstellen, die von abgeleiteten Klassen wiederverwendet werden können. Wenn eine Methode in der abgeleiteten Klasse überschrieben wird, wird sie durch die Methode der abgeleiteten Klasse ersetzt, wenn sie aufgerufen wird.
Es ist auch möglich, auf Methoden der Basisklasse in der abgeleiteten Klasse mit `super()` zuzugreifen. Dies ist besonders hilfreich, wenn die abgeleitete Klasse die Initialisierung der Basisklasse erweitern muss:
```python
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name) # ruft die Initialization der Basisklasse auf
self.breed = breed
```
In diesem Fall hat die Klasse Dog sowohl ein `name` als auch ein `breed` Attribut, obwohl nur `breed` in der `Dog` Klasse definiert ist. Das `name` Attribut wurde von der `Animal` Klasse geerbt.
Darüber hinaus bietet Python Mehrfachvererbung an, d.h. eine Klasse kann von mehreren Basisklassen erben:
```python
class Mammal:
def is_mammal(self):
return True
class Flying: def can_fly(self): return True
class Bat(Mammal, Flying): pass
b = Bat()
print(b.is_mammal()) # True
print(b.can_fly()) # True
```
Bat erbt sowohl von der Mammal als auch von der Flying Klasse, daher haben Bat-Instanzen sowohl `is_mammal` als auch `can_fly` Methoden.
Vererbung ist ein mächtiges Werkzeug zur Code-Wiederverwendung und zur Erstellung einer logischen und gut strukturierten Codebasis.