Website-Suche

Python super() - Python 3 super()


Die Python super() Funktion ermöglicht es uns, auf die Elternklasse explizit zu verweisen. Sie ist nützlich im Falle von Vererbung, wenn wir Funktionen der Superklasse aufrufen möchten.

Python super

Um die Python-Superfunktion zu verstehen, müssen Sie etwas über die Vererbung in Python wissen. Bei der Vererbung in Python erben die Unterklassen von der Superklasse. Die Python-Super()-Funktion ermöglicht es uns, auf die Superklasse implizit zu verweisen. Damit macht Python super unsere Aufgabe einfacher und angenehmer. Wenn wir von der Unterklasse auf die Superklasse verweisen, müssen wir den Namen der Superklasse nicht ausdrücklich schreiben. In den folgenden Abschnitten werden wir über die Python-Superfunktion sprechen.

Beispiel der Super-Funktion in Python

Zunächst schauen Sie sich den folgenden Code an, den wir in unserem Python-Vererbungstutorial verwendet haben. In diesem Beispiel war die Superklasse Person und die Unterklasse war Student. Der Code ist unten angegeben.

class Person:
    # initializing the variables
    name = ""
    age = 0

    # defining constructor
    def __init__(self, person_name, person_age):
        self.name = person_name
        self.age = person_age

        # defining class methods

    def show_name(self):
        print(self.name)

    def show_age(self):
        print(self.age)


definition of subclass starts here
class Student(Person):
    studentId = ""

    def __init__(self, student_name, student_age, student_id):
        Person.__init__(self, student_name, student_age)
        self.studentId = student_id

    def get_id(self):
        return self.studentId  # returns the value of student id


end of subclass definition


Create an object of the superclass
person1 = Person("Richard", 23)
call member methods of the objects
person1.show_age()
Create an object of the subclass
student1 = Student("Max", 22, "102")
print(student1.get_id())
student1.show_name()

Im obigen Beispiel haben wir die Funktion der Elternklasse wie folgt aufgerufen:

Person.__init__(self, student_name, student_age) 

Wir können dies durch einen Aufruf der Python-Superfunktion wie unten gezeigt ersetzen.

super().__init__(student_name, student_age)

Die Ausgabe bleibt in beiden Fällen gleich, wie im untenstehenden Bild gezeigt.

Python 3 super

Bitte beachten Sie, dass die obige Syntax für die super-Funktion in Python 3 ist. Wenn Sie sich in Python 2.x-Versionen befinden, ist es etwas anders und Sie müssen die folgenden Änderungen vornehmen:

class Person(object):
...
        super(Student, self).__init__(student_name, student_age)

Die erste Änderung besteht darin, object als Basisklasse für die Person zu verwenden. Es ist erforderlich, die super-Funktion in Python 2.x-Versionen zu verwenden. Andernfalls erhalten Sie den folgenden Fehler.

Traceback (most recent call last):
  File "super_example.py", line 40, in <module>
    student1 = Student("Max", 22, "102")
  File "super_example.py", line 25, in __init__
    super(Student, self).__init__(student_name, student_age)
TypeError: must be type, not classobj

Die zweite Änderung in der Syntax der Superfunktion selbst. Wie Sie sehen können, ist die Superfunktion in Python 3 viel einfacher zu verwenden, und die Syntax sieht auch sauber aus.

Python Super-Funktion mit mehrstufiger Vererbung

Wie bereits erwähnt, ermöglicht die Python super() Funktion, auf die Oberklasse implizit zu verweisen. Aber im Fall von mehrstufigen Vererbung, auf welche Klasse wird verwiesen? Nun, Python super() verweist immer auf die unmittelbare Oberklasse. Außerdem kann die Python super() Funktion nicht nur die __init__() Funktion ansprechen, sondern auch alle anderen Funktionen der Oberklasse aufrufen. Im folgenden Beispiel werden wir dies sehen.

class A:
    def __init__(self):
        print('Initializing: class A')

    def sub_method(self, b):
        print('Printing from class A:', b)


class B(A):
    def __init__(self):
        print('Initializing: class B')
        super().__init__()

    def sub_method(self, b):
        print('Printing from class B:', b)
        super().sub_method(b + 1)


class C(B):
    def __init__(self):
        print('Initializing: class C')
        super().__init__()

    def sub_method(self, b):
        print('Printing from class C:', b)
        super().sub_method(b + 1)


if __name__ == '__main__':
    c = C()
    c.sub_method(1)

Lass uns die Ausgabe des obigen Python 3 Super-Beispiels mit Mehrfachvererbung ansehen.

Initializing: class C
Initializing: class B
Initializing: class A
Printing from class C: 1
Printing from class B: 2
Printing from class A: 3

Wir können also aus der Ausgabe deutlich sehen, dass die __init__()-Funktion der Klasse C zuerst aufgerufen wurde, dann die Klasse B und danach die Klasse A. Ähnliches geschah beim Aufrufen der sub_method()-Funktion.

Warum benötigen wir die Superfunktion in Python?

Wenn Sie über Erfahrung in der Programmiersprache Java verfügen, sollten Sie wissen, dass die Basisklasse dort auch von einem super-Objekt aufgerufen wird. Dieses Konzept ist also tatsächlich nützlich für die Programmierer. Python bietet jedoch auch die Möglichkeit für den Programmierer, den Namen der Superklasse zu verwenden, um auf sie zu verweisen. Wenn Ihr Programm mehrstufige Vererbung enthält, ist die Funktion super() für Sie hilfreich. Das ist alles zur Python-Super-Funktion. Hoffentlich haben Sie dieses Thema verstanden. Bitte nutzen Sie das Kommentarfeld für Fragen.

Sie können das vollständige Python-Skript und weitere Python-Beispiele aus unserem GitHub-Repository abrufen.

Referenz: Offizielle Dokumentation