Этот модуль посвящен одной из ключевых концепций объектно-ориентированного программирования в Python — Наследованию. Вы научитесь создавать дочерние классы, расширять функционал родительских классов, переопределять методы и использовать функцию super().
Тренажер включает задания разного уровня сложности: от базового синтаксиса объявления классов до понимания порядка разрешения методов (MRO) и встроенных функций проверки типов.
Вам предстоит заполнять пропуски в коде, находить ошибки в синтаксисе наследования, собирать правильные структуры классов из фрагментов и предсказывать поведение программ. Помните, что в Python класс-наследник указывается в круглых скобках после имени класса, а все классы неявно наследуются от базового класса object.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Наследование.
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Создание дочернего класса
Объявите класс ElectricCar, который наследуется от класса Vehicle. Используйте правильный синтаксис наследования в Python.
class Vehicle:
def move(self):
print("Vehicle moves")
class ElectricCar input1S:
def charge(self):
print("Charging...")Переопределение методов
Проанализируйте код. Класс Cat наследуется от Animal и определяет свой метод speak. Что выведет последний print?
class Animal:
def speak(self):
return "Some sound"
class Cat(Animal):
def speak(self):
return "Meow"
my_pet = Cat()
print(my_pet.speak())Терминология наследования
Распределите термины по двум группам: термины, относящиеся к классу, от которого наследуются, и термины, относящиеся к классу, который наследует.
Ошибка синтаксиса наследования
В этом коде допущена синтаксическая ошибка при попытке наследования. Найдите и исправьте строку объявления класса Smartphone.
class Device: def turn_on(self): print("On") class Smartphone extends Device: def call(self): print("Calling...") Инициализация родителя через super()
Заполните пропуски, чтобы корректно вызвать инициализатор родительского класса внутри __init__ дочернего класса. Это необходимо для сохранения атрибута name.
class Person:
def __init__(self, name):
self.name = name
class Employee(Person):
def __init__(self, name, salary):
input1S.input2S(name)
self.salary = salaryПорядок определения и использования
Восстановите правильный порядок строк кода. Сначала должен быть определен базовый класс, затем дочерний, и только потом создание экземпляра и вызов метода.
dog = Dog()class Animal:class Dog(Animal): pass def bark(self): print("Woof")dog.bark()Инструменты работы с классами
Сопоставьте встроенные функции Python и концепции ООП с их описанием.
isinstance()issubclass()super()objectСоздание класса-наследника с новым методом
Соберите код, где класс Square (Квадрат) наследуется от Shape (Фигура) и добавляет метод расчета площади. Лишняя строка содержит логическую ошибку в наследовании.
class Shape: passclass Square(Shape):class Square(Object): def __init__(self, side): self.side = side def area(self): return self.side ** 2Поиск атрибутов при наследовании
Что выведет этот код? В классе Child нет метода greet, поэтому Python будет искать его в родителях.
class Parent:
def greet(self):
print("Hello from Parent")
class Child(Parent):
def play(self):
print("Playing")
c = Child()
c.greet()Результат проверки issubclass
Напишите, что выведет функция print (True или False). Класс C наследует от B, а B наследует от A. Является ли C подклассом A?
class A: pass
class B(A): pass
class C(B): pass
print(issubclass(C, A))