Вебинары Разобраться в IT Реферальная программа Тесты
Программирование Аналитика Дизайн Маркетинг Управление проектами
04 Июл 2024
2 мин
8895

Понимание Python super() с методами __init__()

Пройдите тест, узнайте какой профессии подходите

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

Освойте Python на курсе от Skypro. Вас ждут 400 часов обучения и практики (достаточно десяти часов в неделю), подготовка проектов для портфолио, индивидуальная проверка домашних заданий и помощь опытных наставников. Получится, даже если у вас нет опыта в IT.

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

Допустим, есть базовый класс Animal, который определяет общее поведение животных, и класс Dog, который наследует от Animal и, помимо общего поведения, имеет свои специфические методы и свойства.

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def __init__(self, name):
        Animal.__init__(self, name)

    def speak(self):
        return "Woof!"

В этом примере, чтобы инициализировать класс Dog, мы явно вызываем инициализатор базового класса Animal.__init__.

Однако, Python предлагает более элегантный способ делать это с помощью функции super(). super() возвращает временный объект суперкласса, который позволяет вызывать его методы. Это особенно полезно в случае множественного наследования, так как он следует MRO (method resolution order), обеспечивая правильный порядок вызова методов.

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def __init__(self, name):
        super().__init__(name)

    def speak(self):
        return "Woof!"

Изучайте Python на онлайн-курсе от Skypro «Python-разработчик». Программа рассчитана на новичков без опыта программирования и технического образования. Курс проходит в формате записанных коротких видеолекций. Будет много проверочных заданий и мастер-классов. В конце каждой недели — живая встреча с экспертами в разработке для ответов на вопросы и разбора домашек.

В этом случае, super().__init__(name) делает то же самое, что и Animal.__init__(self, name), но делает код более читаемым и безопасным.

Таким образом, super() — это мощный инструмент, который позволяет сохранить принцип DRY (Don’t Repeat Yourself) и облегчает работу с наследованием.

Добавить комментарий