Рубрики
Без рубрики

Python Super () – Python 3 Super ()

Python Super, Python 3 Super, Python Super () Функция, Python Super __init__, Python 2 Super, Python Super Class Функция Несколько Наследование

Автор оригинала: Pankaj Kumar.

Функция Python Super () позволяет явно обратиться к исходному классу. Это полезно в случае наследования, где мы хотим вызвать функции Super Class.

Python Super.

Чтобы понять о Super Function Python, вы должны знать о наследнии Python. В наследовании Python подклассы наследуют от суперкласса.

Функция Python Super () позволяет нам обратиться в суперкласс неявно. Итак, Python Super делает нашу задачу проще и комфортно. Ссылаясь на суперкласс из подкласса, нам не нужно писать имя суперкласса явно. В следующих разделах мы обсудим Python Super Function.

Пример Python Super Function

Сначала просто посмотрите на следующий код, который мы использовали в нашем Наследование питона руководство. В этом примере кода суперкласс был Человек и подкласс был Студент Отказ Таким образом, код показан ниже.

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()

В приведенном выше примере мы назвали функцию родительского класса как:

Person.__init__(self, student_name, student_age) 

Мы можем заменить это с помощью вызова Python Super Function, как показано ниже.

super().__init__(student_name, student_age)

Вывод останется прежним в обоих случаях, как показано на изображении ниже.

Python 3 Super.

Обратите внимание, что вышеуказанный синтаксис для Super функций Python 3. Если вы находитесь на версиях Python 2.x, то это немного другое, и вам придется выполнить следующие изменения:

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

Первое изменение – иметь объект как базовый класс для человека. Требуется использовать суперфункцию в версиях Python 2.x. В противном случае вы получите следующую ошибку.

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

Второе изменение синтаксиса самой суперфункции.

Как вы можете видеть, что Super функция Python 3 намного проще в использовании, и синтаксис также смотрит в чистоте.

Python Super функционирует с многоуровневым наследством

Как мы уже говорили, что функция Python Super () позволяет нам обратиться в суперкласс неявно.

Но в случае многоуровневых наследний класс он будет ссылаться? Ну, Python Super () всегда будет направлять немедленный суперкласс.

Также функция Python Super () не только может ссылаться на __init __ () Функция, но также может вызвать всю другую функцию суперкласса. Итак, в следующем примере мы увидим это.

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)

Давайте посмотрим на выходе выше супер пример Python 3 с многоуровневым наследством.

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

Итак, от вывода мы можем ясно видеть, что __init __ () Функция класса C была вызвана сначала, а затем класс B и после этого класса А. Подобная вещь произошла по телефону sub_method () функция.

Почему нам нужна супер функция Python

Если у вас есть предыдущий опыт в языке Java, то вы должны знать, что базовый класс также называется супер объект там. Таким образом, эта концепция на самом деле полезна для кодеров. Тем не менее, Python также сохраняет объект для программиста для использования имени SuperClass для их ссылки. И, если ваша программа содержит многоуровневое наследование, то эта функция Super () полезна для вас.

Итак, это все о Python Super Function. Надеюсь, вы поняли эту тему. Пожалуйста, используйте окно комментариев для любого запроса.

Ссылка: Официальная документация