Решение 1. Сопоставьте принципы ООП
Правильный ответ: 1-d, 2-b, 3-a, 4-c.
- Наследование — повторное использование кода из базового класса.
- Полиморфизм — поведение зависит от конкретного подкласса.
- Инкапсуляция — скрытие внутренней реализации.
- Абстракция — выделение общих характеристик.
Решение 2. Что делает super()?
Правильный ответ: c — автоматически вызывает метод родителя, учитывая порядок наследования.
Решение 3. Результат isinstance()
Вывод: True.
Почему: Dog наследуется от Animal, поэтому объект Dog является экземпляром и Dog, и Animal.
Решение 4. Найдите ошибку
Ошибка: у классового метода отсутствует обязательный первый аргумент cls.
class Book:
@classmethod
def info(cls) -> None:
print("Книга")
Book.info()
Решение 5. Исправьте код
class Person:
def __init__(self, name: str) -> None:
self.name = name
class Student(Person):
def __init__(self, name: str, course: int) -> None:
super().__init__(name)
self.course = course
s = Student("Alice", 2)
print(s.name) # Alice
print(s.course) # 2
Логика: super().__init__(name) вызывает инициализацию родителя, поэтому не нужно повторно присваивать self.name.
Решение 6. Иерархия Person → Student / Teacher
class Person:
def __init__(self, name: str) -> None:
self.name = name
def introduce(self) -> None:
print(f"Hello, my name is {self.name}.")
class Student(Person):
def __init__(self, name: str, course: int) -> None:
super().__init__(name)
self.course = course
def introduce(self) -> None:
super().introduce()
print(f"I'm on course {self.course}.")
class Teacher(Person):
def __init__(self, name: str, subject: str) -> None:
super().__init__(name)
self.subject = subject
def introduce(self) -> None:
print(f"Hello, I am professor {self.name}.")
print(f"My subject is {self.subject}.")
people = [Student("Alice", 2), Teacher("Bob", "Mathematics")]
for person in people:
person.introduce()
Ожидаемый вывод:
Hello, my name is Alice.
I'm on course 2.
Hello, I am professor Bob.
My subject is Mathematics.
Логика: базовый класс Person задаёт общее поле name и метод introduce(). Student расширяет приветствие через super().introduce(), а Teacher полностью переопределяет вывод. Полиморфизм проявляется в том, что один цикл вызывает разные версии метода.
Проверить по документации: про наследование см. Python Tutorial — Inheritance, про
super() — Built-in Functions.