Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Python

Python Vererbung meistern: Konzepte, Syntax und praktische Beispiele

Python Vererbung

Vererbung ermöglicht es Ihnen, eine neue Klasse zu erstellen, die alle Funktionalitäten einer Elternklasse erbt, während sie Funktionen hinzufügt oder erweitert. Dieses Tutorial erklärt, wie man Vererbung in Python verwendet, mit klaren Beispielen und Best-Practice-Anleitungen.

Video: Python Vererbung

Vererbung in Python

Vererbung ist ein Kernprinzip der objektorientierten Programmierung, das Code-Wiederverwendung und logische Hierarchie fördert. Eine neue Klasse (die abgeleitete oder Kind-Klasse) wird mit minimalen oder keinen Änderungen an einer bestehenden Klasse (der Basis- oder Eltern-Klasse) definiert. Die Kind-Klasse erhält automatisch die Attribute und Methoden ihres Elternteils, die dann nach Bedarf überschrieben oder erweitert werden können.


Python Vererbung Syntax

class Basisklasse:
    # Körper der Basisklasse
class AbgeleiteteKlasse(Basisklasse):
    # Körper der abgeleiteten Klasse

Im obigen Snippet erbt AbgeleiteteKlasse alle öffentlichen Mitglieder von Basisklasse. Durch Hinzufügen neuer Methoden oder Überschreiben bestehender kann die abgeleitete Klasse das Verhalten anpassen, während sie die Basismplementierung wiederverwendet.


Beispiel für Vererbung in Python

Lassen Sie uns Vererbung an einem praktischen Beispiel illustrieren. Angenommen, wir haben eine generische Polygon-Klasse, die die Anzahl der Seiten und ihre Längen speichert:

class Polygon:
    def __init__(self, anzahl_seiten):
        self.n = anzahl_seiten
        self.seiten = [0 for _ in range(anzahl_seiten)]
    def eingabe_seiten(self):
        self.seiten = [float(input(f"Seite {i+1} eingeben: ")) for i in range(self.n)]
    def anzeige_seiten(self):
        for i, seite in enumerate(self.seiten, 1):
            print(f"Seite {i} ist {seite}")
Polygon-Klasse kapselt gemeinsame Attribute und Methoden für jedes Polygon. Ein Dreieck ist ein spezielles Polygon mit genau drei Seiten, daher kann es von Polygon erben, ohne die gemeinsame Logik neu zu definieren:

class Dreieck(Polygon):
    def __init__(self):
        super().__init__(3)  # Basisklasse mit 3 Seiten initialisieren
    def flaeche_berechnen(self):
        a, b, c = self.seiten
        s = (a + b + c) / 2
        flaeche = (s * (s - a) * (s - b) * (s - c)) ** 0.5
        print(f"Die Fläche des Dreiecks beträgt {flaeche:.2f}")

Die Ausführung des Folgenden demonstriert die Vererbung in Aktion:

>>> t = Dreieck()
>>> t.eingabe_seiten()
Seite 1 eingeben: 3
Seite 2 eingeben: 5
Seite 3 eingeben: 4
>>> t.anzeige_seiten()
Seite 1 ist 3.0
Seite 2 ist 5.0
Seite 3 ist 4.0
>>> t.flaeche_berechnen()
Die Fläche des Dreiecks beträgt 6.00

Beachten Sie, dass Dreieck eingabe_seiten() und anzeige_seiten() aufrufen kann, obwohl es sie nie definiert – Vererbung macht diese Methoden automatisch verfügbar.

Wenn ein Attribut oder eine Methode in der Kind-Klasse nicht gefunden wird, sucht Python in der Elternklasse, und dieser Lookup setzt sich die Vererbungskette hinauf fort, falls nötig.


Methodenüberschreibung in Python

Sowohl Polygon als auch Dreieck definieren eine __init__-Methode. Die Implementierung des Kindes überschreibt die des Elternteils, kann (und sollte) aber die Basislokik erweitern, indem sie diese explizit aufruft. Die Verwendung von super() ist der moderne, bevorzugte Ansatz:

class Dreieck(Polygon):
    def __init__(self):
        super().__init__(3)  # ruft Polygon.__init__ auf

Beim Überschreiben kann die Kind-Methode neues Verhalten hinzufügen oder das Basisverhalten modifizieren, während die ursprüngliche Funktionalität erhalten bleibt.

Python bietet isinstance() und issubclass() zur Introspektion von Vererbungsbeziehungen:

t = Dreieck()
print(isinstance(t, Dreieck))  # True
print(isinstance(t, Polygon))  # True
print(isinstance(t, int))      # False
print(isinstance(t, object))   # True
print(issubclass(Polygon, Dreieck))  # False
print(issubclass(Dreieck, Polygon))  # True
print(issubclass(bool, int))         # True

Diese Hilfsfunktionen sind essenziell für Typprüfung und Sicherstellung, dass Objekte erwarteten Schnittstellen entsprechen.

Mehr zu super() in der Python super() Funktion Dokumentation.

Python

  1. Python-Datentypen meistern: Praxisleitfaden
  2. Python-Operatoren meistern: Umfassender Leitfaden
  3. Python pass-Statement meistern: Praxisleitfaden
  4. Python-Dictionaries meistern: Erstellung, Manipulation und fortgeschrittene Techniken
  5. Python benutzerdefinierte Exceptions: Ein praktischer Leitfaden
  6. Python Objektorientierte Programmierung meistern: Klassen, Vererbung, Kapselung & Polymorphie
  7. Operator Overloading in Python meistern: Ein praktischer Leitfaden
  8. Pythons @property Decorator meistern: Saubere, rückwärtskompatible Getter & Setter
  9. type() und isinstance() in Python verstehen: Praktische Beispiele
  10. C# Vererbung: Wiederverwendbaren & wartbaren Code erstellen