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, которые помогут вам в реализации.

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

# 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

Потренируйтесь самостоятельно: Онлайн-компилятор Python