Функция Python super()

Встроенные функции Python3


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

При наследовании классов,super()она позволяет вызывать методы родительского класса, обеспечивая повторное использование кода и расширение методов. Это очень важная функция в объектно-ориентированном программировании на Python.

Определение слова: superОно означает "super", здесь имеется в виду родительский класс или суперкласс.


Базовый синтаксис и параметры

Формат синтаксиса

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

Описание параметра

  • Тип параметра:
    • Тип: класс
    • Описание: класс, для которого нужно получить прокси родительского класса.
  • Параметр object-or-type:
    • Тип: object или class
    • Описание: Должен быть экземпляром или подклассом типа.

Описание функций

  • Возвращаемое значение: Возвращает прокси-объект, используемый для вызова методов родительского класса.
  • Особенность: Поддерживает порядок разрешения методов (MRO) и корректно обрабатывает множественное наследование.

Примеры

Пример 1: Вызов конструктора родительского класса в подклассе

Пример

# Родительский класс
class Animal:
    def __init__(self, name):
        self.name = name
        print(f"Животное {self.name} родилось")

    def speak(self):
        print("Животное издаёт звук")

# Подкласс
class Dog(Animal):
    def __init__(self, name, breed):
        # Вызов __init__ родительского класса
        super().__init__(name)
        self.breed = breed
        print(f"Порода: {self.breed}")

    def speak(self):
        # Вызов метода родительского класса
        super().speak()
        print("Гав!")

#
dog = Dog("Little White", "Husky")
# Вывод:
# Животное Little White родилось
# Порода — Husky

dog.speak()
# Вывод:
# Животное издаёт звук
# Гав!

Ожидаемый вывод:

The animal Xiaobai was born
Breed: Husky
The animal makes sounds
Woof woof!

Анализ кода:

  1. super().__init__(name)Вызывает конструктор родительского класса.
  2. super().speak()Вызывает метод родительского класса.
  3. Это позволяет расширить функциональность родительского класса в подклассе.

Пример 2: Множественное наследование

Пример

# Пример множественного наследования
класс A:
    def method(self):
        print("A.method")

класс B(A):
    def method(self):
        print("B.method")
        super().method()  # Вызов A.method

класс C(A):
    def method(self):
        print("C.method")
        super().method()  # Вызов A.method

класс D(B, C):
    def method(self):
        print("D.method")
        super().method()  # Вызов в порядке MRO

# MRO: D -> B -> C -> A
d = D()
d.method()
# Вывод:
# D.method
# B.method
# C.method
# A.method

# Просмотр MRO
print(D.__mro__)

Ожидаемый вывод:

D.method
B.method
C.method
A.method
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)

Анализ кода:

  • super()Вызывается в соответствии с MRO (порядок разрешения методов).
  • Это обеспечивает корректность множественного наследования.

Пример 3: без параметров (рекомендуется)

Пример

# Рекомендуемое использование в Python 3: параметры не нужны
class Parent:
    def greet(self, name):
        return f"Привет, {name}!"

class Child(Parent):
    def greet(self, name):
        # Вызов метода родительского класса и расширение
        message = super().greet(name)
        return message + " С возвращением!"

child = Child()
print(child.greet("Том"))
# Вывод: Привет, Том! С возвращением!

Ожидаемый вывод:

Запуск в реальной среде отобразит расширенное приветствие.

super()Это ключевая функция для реализации наследования классов и полиморфизма в Python.


Встроенные функции Python3


Другие расширения