Python super() & Python 3 super() – Umfassender Leitfaden

Die Python super() Funktion erlaubt es uns, explizit auf die Elternklasse zu verweisen. Dies ist nützlich im Fall von Vererbung, wenn wir Funktionen der Superklasse aufrufen wollen.

Python super

Um die Python super Funktion zu verstehen, müssen Sie über Python Vererbung Bescheid wissen. Bei der Python Vererbung erben die Unterklassen von der Superklasse. Die Python super() Funktion ermöglicht es uns, implizit auf die Superklasse zu verweisen. So macht Python super unsere Aufgabe einfacher und bequemer. Beim Verweisen auf die Superklasse von der Unterklasse aus müssen wir den Namen der Superklasse nicht explizit schreiben. In den folgenden Abschnitten werden wir die Python super Funktion besprechen.

Beispiel für die Funktion

Zuerst schauen Sie sich den folgenden Code an, den wir in unserem Python Vererbungs-Tutorial verwendet haben. In diesem Beispielcode war die Superklasse Person und die Unterklasse war Student. Der Code wird unten gezeigt.

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 super Funktion wie unten ersetzen.

super().__init__(student_name, student_age)

Python 3 super

Beachten Sie, dass die obige Syntax für die Python 3 super Funktion ist. Wenn Sie Python 2.x Versionen verwenden, 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 Person zu haben. 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 
    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 betrifft die Syntax der super Funktion selbst. Wie Sie sehen können, ist die Python 3 super Funktion viel einfacher zu verwenden und die Syntax sieht auch sauber aus.

Python super Funktion mit mehrstufiger Vererbung

Wie wir zuvor erwähnt haben, ermöglicht die Python super() Funktion, implizit auf die Superklasse zu verweisen. Aber im Fall von mehrstufigen Vererbungen, auf welche Klasse wird sie verweisen? Nun, Python super() wird immer auf die unmittelbare Superklasse verweisen. Die Python super() Funktion kann nicht nur die __init__() Funktion aufrufen, sondern auch alle anderen Funktionen der Superklasse. So werden wir das im folgenden Beispiel 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)

Lassen Sie uns den Output des obigen Python 3 super Beispiels mit mehrstufiger Vererbung sehen.

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

Also, aus dem Output können wir deutlich sehen, dass zuerst die __init__() Funktion der Klasse C aufgerufen wurde, dann die Klasse B und danach die Klasse A. Ähnliches passierte beim Aufrufen der sub_method() Funktion.

Warum brauchen wir die Python super Funktion

Wenn Sie bereits Erfahrung in der Java-Sprache haben, sollten Sie wissen, dass die Basisklasse dort auch durch ein Superobjekt aufgerufen wird. Also ist dieses Konzept tatsächlich nützlich für die Programmierer. Jedoch bietet Python auch die Möglichkeit für den Programmierer, den Namen der Superklasse zu verwenden, um sie zu referenzieren. Und wenn Ihr Programm mehrstufige Vererbung enthält, dann ist diese super() Funktion hilfreich für Sie. Das ist alles über die Python super Funktion. Hoffentlich haben Sie dieses Thema verstanden. Bitte verwenden Sie das Kommentarfeld für jegliche Fragen. Python super() & Python 3 super() – Umfassender Leitfaden

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: