Функция 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__ и расширение поведения родителя.
Задание
СреднеВ этом испытании вы реализуете иерархию классов Person и Employee с использованием наследования.
person.py: Содержит класс Person с атрибутами name и ageemployee.py: Содержит класс Employee, который наследуется от Persondriver.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()В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Object Oriented Programming
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — Простой калькулятор4Наследование
Базовое наследованиеФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовИтоги — Иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy5Полиморфизм
Снова о переопределении методовУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовИтоги — Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыИтоги — Менеджер банковского счета6Инкапсуляция
Public, Protected, Private члены классаМодификаторы доступаСокрытие данныхДекораторы property: продвинутый уровеньИтоги: Система учета студентов12Проект: Управление библиотекой
Обзор проектаКлассы Book и User