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

Понимание метода Super () в Python

Сегодня в этом руководстве мы собираемся обсудить метод Super () в Python.

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

Понимание метода Super () в Python

Введение

Сегодня в этом руководстве мы собираемся обсудить Метод Super () в Python Отказ

Перед погружением прямо в тему мы настоятельно рекомендуем пройти учебник по наследству Python.

Как только вы знаете о наследстве в Python, мы можем начать.

Метод Super () в Python

супер Метод Возвращает прокси-объект, который делегаты метод вызовы на родитель или брат класс Тип Отказ Это полезно для доступа к унаследованным методам, которые были переопределены в классе.

Или просто, он используется для вызова конструктора, то есть __init __ () Метод Superclass Отказ

Синтаксис Для использования Super в Python приведен ниже.

super([type[, object-or-type]])

В Python 3.x Версии, мы можем использовать Super без прохождения выше двух параметров. Посмотрите на фрагмент кода ниже.

class C(B):
    def method(self, arg):
        super().method(arg)

Здесь C Это полученный класс, B Это базовый класс, метод – это пользовательская функция с аргументом arg Отказ

Как видите, линия Super (). Метод (ARG) на самом деле эквивалентно Super (C, Self) .method (arg) в Python 3.x Отказ Это не допускается в Python 2.x Отказ Следовательно, использование супер есть немного сложно.

Используя Super ()

Рассмотрим ниже приведенный ниже пример.

class Demo:
    a = 0
    b = 0
    c = 0
    def __init__(self,A,B,C):
        self.a = A
        self.b = B
        self.c = C
    def display(self):
        print(self.a, self.b, self.c)

class Newdemo(Demo):
    d = 0
    def __init__(self,A,B,C,D):
        self.a = A
        self.b = B
        self.c = C
        self.d = D

    def display(self):
        print(self.a, self.b, self.c,self.d)

B1 = Demo(100,200,300)
print("Contents of Base Class:")
B1.display()
D1 = Newdemo(10,20,30,40)
print("Contents of Derived Class:")
D1.display()

Выход :

Вывод1.

В приведенном выше примере классы, полученные из базового класса Демо не были реализованы эффективно или надежно.

Полученный класс Newdemo Явно инициализирует значение полей A, B и C базового класса. Такое же дублирование кода найден при инициализации тех же полей в базовом классе, Демо тоже.

Этот процесс неэффективно. Это подразумевает, что подкласс Должен быть предоставлен доступ к членам A Superclass Отказ

Следовательно, всякий раз, когда подкласс должен ссылаться на его непосредственный супер класс, супер входит в картину.

Super (), чтобы позвонить в Super Class Constructor

Теперь давайте применим Super () Способ приведенного выше примера.

class Demo:
    a = 0
    b = 0
    c = 0
    def __init__(self,A,B,C):
        self.a = A
        self.b = B
        self.c = C
    def display(self):
        print(self.a, self.b, self.c)

class Newdemo(Demo):
    d = 0
    def __init__(self,A,B,C,D):
        self.d = D
        super().__init__(A,B,C) #super to call super Class
        #The __init__() Method

    def display(self):
        print(self.a, self.b, self.c,self.d)

B1 = Demo(12,34,56)
print("Contents of Base Class:")
B1.display()
D1 = Newdemo(11,22,33,44)
print("Contents of Derived Class:")
D1.display()

Выход :

Выход

Здесь полученный класс Newdemo называет Super () С аргументами А , B и C Отказ Это вызывает конструктор __init__ базового класса, то есть Демо быть названным. Это инициализирует значения А , B и C Отказ Следовательно, Newdemo Класс больше не инициализирует сам ценности.

Использование Super в Python 2.x

синтаксис позвонить в супер Класс конструктор в Python 2.x дано ниже,

super(Derived_Class_Name, self).__init__(Parameters_of_Super_Class_Constructor)

Следовательно, мы должны внести некоторые незначительные изменения в приведенном выше примере, если мы хотим использовать его в Python 2 Отказ

Во-первых, нам нужно поставить объект в базовом классе, как показано ниже.

class Demo(object):
...#other statements

А во-вторых, пройти Newdemo и Я На сайте Super Class Call. Как это.

super(Newdemo,self).__init__(A,B,C) #super to call super Class
...        #The __init__() Method

Почему нам нужно супер ()

В случае Одиночное наследование С родительским и классом потомства, супер Функция используется для неявно, обратитесь к родительскому классу, не называя его прямо. Это делает код более эффективным, поддерживаемым и надежным в природе.

Оконемся, для Многоуровневое наследование , супер Способ можно использовать для неявного ссылки на немедленный суперкласс. Это снова заставляет код проще понять и очень поддерживаться.

Заключение

Так что в этом руководстве мы поняли понятие Метод Super () в Python , его использование и нужно.

Для любых дополнительных вопросов не стесняйтесь комментировать ниже.

использованная литература