English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Vererbung ermöglicht es uns, eine Klasse zu definieren, die alle Funktionen der Elternklasse erbt und uns mehr Funktionen hinzufügen lässt. In diesem Artikel werden Sie lernen, wie man Vererbung in Python verwendet.
Vererbung ist eine starke Funktion der objektorientierten Programmierung.
es bezieht sich darauf, eine neueKlassegenannt, die wenig oder keine Änderungen an der bestehenden Klasse vornehmen. Die neue Klasse wirdabgeleitete (oder Kindklasse)und die neue Klasse, die von ihr abgeleitet wird, wirdBasis- (oder Elternklass).
class BaseClass: # Hauptteil der Basisklasse class DerivedClass(BaseClass): # Hauptteil der abgeleiteten Klasse
Abgeleitete Klassen erben Elemente von Basisklassen und fügen neue Elemente hinzu. Dies erhöht die Wiederverwendbarkeit des Codes.
Um die Verwendung von Vererbung zu demonstrieren, lassen Sie uns ein Beispiel nennen.
Ein Polygon ist ein Objekt mit3Ein oder mehrseitiges geschlossenes Geometrieobjekt. Es wird gesagt, dass wir eine Klasse namens Polygon haben, die wie folgt definiert ist.
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("Geben Sie die Kantenlänge ein "+str(i+1)+" : ")) for i in range(self.n)] def dispSides(self): for i in range(self.n): print("Kantenlänge",i+1,"ist",self.sides[i])
Diese Klasse hat Datenattribute, um die Kantenanzahl, die KantenZahlund die Größe jeder Kante als Liste, d.h.Kantenanzahl.
Methoden inputSides() nimmt die Größe jeder Seite, und dispSides() zeigt sie korrekt an.
Ein Dreieck ist ein dreieckiges3ecken的多边形。因此,我们可以创建一个名为Triangle的类,该类继承自Polygon。这使得类中所有可用的属性都可以在中Polygon leicht in Triangle verwendet werden. Wir müssen sie nicht erneut definieren(Code-Wiederverwendbarkeit). Triangle ist wie folgt definiert.
class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # Berechnung des Halbachses s = (a + b + c) / 2 Fläche = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('Der Flächeninhalt des Dreiecks ist%0.2f'%area)
Doch, die Klasse Triangle hat eine neue Methode findArea(), um die Fläche des Dreiecks zu finden und auszugeben. Dies ist ein Beispiel für einen Lauf.
>>> t = Triangle() >>> t.inputSides() Geben Sie die Kantenlänge ein 1 : 3 Geben Sie die Kantenlänge ein 2 : 5 Geben Sie die Kantenlänge ein 3 : 4 >>> t.dispSides() Kantenlänge 1 ist 3.0 Kantenlänge 2 ist 5.0 Kantenlänge 3 ist 4.0 >>> t.findArea() Der Fläche eines Dreiecks ist 6.00
Wir können sehen, dass wir obwohl wir keine Methoden wie inputSides() oder sides() für die Klasse Triangle definiert haben, sie dennoch verwenden können.
Wenn die Eigenschaft in der Klasse nicht gefunden wird, wird die Suche auf die Basisklasse fortgesetzt. Wenn die Basisklasse selbst von einer anderen Klasse abgeleitet ist, wird diese Operation rekursiv wiederholt.
Beachten Sie im obigen Beispiel, dass sowohl in den Klassen Triangle und Polygon die Methode __init__() definiert ist. In diesem Fall überschreibt die Methode in der abgeleiteten Klasse die Methode in der Basisklasse. Das bedeutet, dass __init__() in Triangle vor __init__() in Polygon priorisiert ist.
Normalerweise neigen wir dazu, die Definition zu erweitern, anstatt sie einfach zu ersetzen, wenn wir grundlegende Methoden überschreiben. Dies wird durch das Aufrufen der Methode der Basisklasse aus der abgeleiteten Klasse (Aufruf von Polygon.__init__() aus Triangle.__init__()) erreicht.
Die bessere Wahl ist es, die eingebauten Funktionen super() zu verwenden. Daher super().__init__(3) äquivalent zu Polygon.__init__(self,3) und ist die Vorgabe. Sie können mehr überin Pythonsuper() FunktionMehr Informationen.
Die beiden integrierten Funktionen isinstance() und issubclass() dienen zur Überprüfung der Vererbung. Gibt ein Objekt ein Beispiel für die Klasse oder eine andere abgeleitete Klasse davon, so gibt die Funktion isinstance() True zurück. 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
Ebenso wird issubclass() verwendet, um die Vererbung zu überprüfen.
>>> issubclass(Polygon, Triangle) False >>> issubclass(Triangle, Polygon) True >>> issubclass(bool, int) True