Python Inheritance

Table of Contents

 

Inheritance ermöglicht es uns, eine Klasse zu definieren, die die gesamte Funktionalität von einer übergeordneten Klasse übernimmt und uns erlaubt, weitere hinzuzufügen. In diesem Tutorial lernen Sie, die Vererbung in Python zu verwenden.

 

Inheritance in Python

 

Inheritance ist eine mächtige Funktion in der objektorientierten Programmierung.

 

Sie bezieht sich auf die Definition einer neuen Klasse mit geringen oder keinen Änderungen an einer bestehenden Klasse. Die neue Klasse wird als abgeleitete (oder child) klasse) und diejenige, von der es erbt, heißt die Base (oder Eltern) klasse.

 


 

 

Python Inheritance Syntax

 

class BaseClass:
  Body of base class
class DerivedClass(BaseClass):
  Body of derived class

 

Eine abgeleitete Klasse erbt Funktionen von der Basisklasse, wobei neue Funktionen hinzugefügt werden können. Dies führt zu einer Wiederverwendbarkeit des Codes.

 


 

 

Beispiel für Inheritance in Python

 

Ein Polygon ist eine geschlossene Figur mit 3 oder mehr Seiten. Sagen wir, wir haben eine Klasse namens Polygon wie folgt definiert.

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]

    def inputSides(self):
        self.sides = [float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)]

    def dispSides(self):
        for i in range(self.n):
            print("Side",i+1,"is",self.sides[i])

 

 

Diese Klasse hat Datenattribute zum Speichern der Anzahl der Seiten n und Größe jeder Seite als Liste namens sides.

 

Die inputSides() Methode nimmt den Betrag jeder Seite auf und dispSides() zeigt diese Seitenlängen an.

 

Ein Dreieck ist ein Polygon mit 3 Seiten. Wir können also eine Klasse namens Triangle die erbt von Polygon. Dies macht alle Attribute von Polygon Klasse zur Verfügung, die dem Triangle Klasse.

 

Wir müssen sie nicht erneut definieren (Wiederverwendbarkeit des Codes). Triangle kann wie folgt definiert werden.

 

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

    def findArea(self):
        a, b, c = self.sides
        # calculate the semi-perimeter
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('Der Flächeninhalt des Dreiecks ist %0.2f' %area)

 

Allerdings ist die Klasse Triangle hat eine neue Methode findArea() um den Flächeninhalt des Dreiecks zu finden und zu drucken. Hier ist ein Beispieldurchlauf.

>>> t = Triangle()

>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4

>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0

>>> t.findArea()
The area of the triangle is 6.00

 

Wir können sehen, dass, obwohl wir keine Methoden wie inputSides() oder dispSides() für Klasse Triangle getrennt, konnten wir sie nutzen.

Wird ein Attribut in der Klasse selbst nicht gefunden, geht die Suche weiter zur Basisklasse. Dies wiederholt sich rekursiv, wenn die Basisklasse selbst von anderen Klassen abgeleitet ist.

 


 

Method Overriding in Python

 

Beachten Sie im obigen Beispiel, dass __init__() Methode wurde in beiden Klassen definiert,, Triangle ebenso Polygon. Wenn dies geschieht, überschreibt die Methode in der abgeleiteten Klasse die in der Basisklasse. Dies soll heißen, __init__() in Triangle bekommt den Vorzug vor dem __init__ in Polygon.

 

Im Allgemeinen neigen wir beim Überschreiben einer Basismethode dazu, die Definition zu erweitern, anstatt sie einfach zu ersetzen. Dasselbe geschieht durch Aufrufen der Methode in der Basisklasse aus der Methode in der abgeleiteten Klasse (calling Polygon.__init__() von __init__() im Triangle).

 

Eine bessere Möglichkeit wäre die Verwendung der eingebauten Funktion super(). So, super().__init__(3) ist äquivalent zu Polygon.__init__(self,3) und wird bevorzugt. Um mehr über die . zu erfahren super() Funktion in Python, besuchen Sie Python super() Funktion.

 

Zwei eingebaute Funktionen isinstance() und issubclass() werden zur Überprüfung von Vererbungen verwendet.

 

Die Funktion isinstance() gibt zurück True wenn das Objekt eine Instanz der Klasse oder andere davon abgeleitete Klassen ist. Jede einzelne Klasse in Python erbt von der Basisklasse object.

>>> isinstance(t,Triangle)
True

>>> isinstance(t,Polygon)
True

>>> isinstance(t,int)
False

>>> isinstance(t,object)
True

 

 

Ähnlich, issubclass() wird verwendet, um auf die Klasse “inheritance” zu prüfen.

>>> issubclass(Polygon,Triangle)
False

>>> issubclass(Triangle,Polygon)
True

>>> issubclass(bool,int)
True