Menu
Coddy logo textTech

Функция super()

Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 18 из 64.

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

Вот пример использования super() в конструкторе:

class Animal:
    def __init__(self, name):
        self.name = name
        print(f"Animal created: {name}")

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

Создайте объект собаки:

buddy = Dog("Buddy", "Golden Retriever")
print(f"Name: {buddy.name}, Breed: {buddy.breed}")

Вывод:

Animal created: Buddy
Dog breed set: Golden Retriever
Name: Buddy, Breed: Golden Retriever

Используйте super() для расширения родительских методов:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Сначала вызываем метод родителя
        print("Woof!")        # Добавляем поведение, специфичное для собаки

Вызовите расширенный метод:

buddy = Dog()
buddy.make_sound()

Вывод:

Generic animal sound
Woof!

Без super() вы потеряете функциональность родительского класса:

class Cat(Animal):
    def make_sound(self):
        print("Meow!")  # Только звук кошки, родительский метод игнорируется

cat = Cat()
cat.make_sound()

Результат:

Meow!

Ключевой момент: Используйте super() для вызова методов родительского класса из дочерних классов. Это позволяет расширять функциональность, а не полностью заменять её. Типичные варианты использования включают вызов родительских методов __init__ и расширение поведения родителя.

challenge icon

Задание

Средне

В этом испытании вы реализуете иерархию классов Person и Employee с использованием наследования.

  • person.py: Содержит класс Person с атрибутами name и age
  • employee.py: Содержит класс Employee, который наследуется от Person
  • driver.py: Основной файл для тестирования вашей реализации

Каждый файл содержит подробные комментарии TODO, которые помогут вам в реализации.

Шпаргалка

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

Использование super() в конструкторах:

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

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Вызов __init__ родителя
        self.breed = breed

Использование super() для расширения методов:

class Animal:
    def make_sound(self):
        print("Generic animal sound")

class Dog(Animal):
    def make_sound(self):
        super().make_sound()  # Сначала вызываем метод родителя
        print("Woof!")        # Добавляем поведение, специфичное для дочернего класса

Без super(): Методы дочернего класса полностью заменяют функциональность родителя вместо её расширения.

Попробуйте сами

# TODO: Импортируйте класс Person из person.py
# TODO: Импортируйте класс Employee из employee.py

def main():
    # TODO: Создайте объект Person с именем "Alice" и возрастом 30
    person = None
    
    # TODO: Создайте объект Employee с именем "Bob", возрастом 35 и должностью "Developer"
    employee = None
    
    # TODO: Вызовите метод introduce() для объекта Person
    # Ожидаемый вывод: "Hi, I'm Alice and I'm 30 years old"
    
    # TODO: Выведите пустую строку для разделения — print()
    
    # TODO: Вызовите метод introduce() для объекта Employee
    # Ожидаемый вывод: 
    # "Hi, I'm Bob and I'm 35 years old"
    # "I work as a Developer"

if __name__ == "__main__":
    main()
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Object Oriented Programming