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(), чтобы вызывать методы родительского класса из дочерних классов. Это позволяет расширять функциональность, а не полностью заменять её. Обычно 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Проверьте себя

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

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

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