Menu
CoddyTech

Функция super()

Часть раздела Объектно-ориентированное программирование путешествия по 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
    # Expected output: "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Проверьте себя

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

Все уроки раздела Объектно-ориентированное программирование

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