Python-Vererbung (mit Beispielen)

Durch Vererbung können wir eine Klasse definieren, die alle Funktionen einer übergeordneten Klasse übernimmt und weitere hinzufügen kann. In diesem Tutorial lernen Sie, wie Sie die Vererbung in Python verwenden.

Video: Python-Vererbung

Vererbung in Python

Vererbung ist eine leistungsstarke Funktion in der objektorientierten Programmierung.

Es bezieht sich auf das Definieren einer neuen Klasse ohne oder mit nur geringen Änderungen an einer vorhandenen Klasse. Die neue Klasse wird als abgeleitete (oder untergeordnete) Klasse bezeichnet, und die Klasse, von der sie erbt, wird als Basisklasse (oder übergeordnete Klasse) bezeichnet .

Python-Vererbungssyntax

 Klasse BaseClass: Hauptteil der Basisklassenklasse DerivedClass (BaseClass): Hauptteil der abgeleiteten Klasse

Die abgeleitete Klasse erbt Features von der Basisklasse, zu der neue Features hinzugefügt werden können. Dies führt zur Wiederverwendbarkeit von Code.

Beispiel für die Vererbung in Python

Nehmen wir ein Beispiel, um die Verwendung der Vererbung zu demonstrieren.

Ein Polygon ist eine geschlossene Figur mit 3 oder mehr Seiten. Angenommen, wir haben eine Klasse namens Polygonwie 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 verfügt über Datenattribute zum Speichern der Anzahl der Seiten n und der Größe jeder Seite als Liste mit den Namen Seiten.

Das inputSides()Verfahren nimmt die Größe 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 erstellen, die von Polygon erbt. Dadurch stehen der Triangle-Klasse alle Attribute der Polygon-Klasse zur Verfügung.

Wir müssen sie nicht erneut definieren (Wiederverwendbarkeit des Codes). Das Dreieck 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('The area of the triangle is %0.2f' %area)

Die Klasse Triangleverfügt jedoch über eine neue Methode findArea()zum Suchen und Drucken des Bereichs des Dreiecks. Hier ist ein Probelauf.

 >>> 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 wir, obwohl wir Methoden wie inputSides()oder dispSides()für die Klasse nicht Triangleseparat definiert haben, sie verwenden konnten.

Wenn in der Klasse selbst kein Attribut gefunden wird, wird die Suche zur Basisklasse fortgesetzt. Dies wird rekursiv wiederholt, wenn die Basisklasse selbst von anderen Klassen abgeleitet ist.

Überschreiben von Methoden in Python

Beachten Sie im obigen Beispiel, dass die __init__()Methode in beiden Klassen definiert wurde, sowohl im Dreieck als auch im Polygon. In diesem Fall überschreibt die Methode in der abgeleiteten Klasse die in der Basisklasse. Dies bedeutet, dass __init__()im Dreieck der Vorzug vor dem __init__im Polygon erhalten wird.

Im Allgemeinen tendieren wir beim Überschreiben einer Basismethode dazu, die Definition zu erweitern, anstatt sie einfach zu ersetzen. Das gleiche geschieht, indem die Methode in der Basisklasse von der in der abgeleiteten Klasse aufgerufen wird (Aufruf Polygon.__init__()von __init__()in Triangle).

Eine bessere Option wäre die Verwendung der integrierten Funktion super(). Ist super().__init__(3)also äquivalent zu Polygon.__init__(self,3)und wird bevorzugt. Weitere Informationen zur super()Funktion in Python finden Sie unter Python super ().

Zwei integrierte Funktionen isinstance()und issubclass()werden verwendet , Erbschaften zu überprüfen.

Die Funktion gibt isinstance()zurück, Truewenn das Objekt eine Instanz der Klasse oder anderer davon abgeleiteter Klassen ist. Jede Klasse in Python erbt von der Basisklasse object.

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

In ähnlicher Weise issubclass()wird verwendet, um die Klassenvererbung zu überprüfen.

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

Interessante Beiträge...