Решение 1. Результат вызова унаследованного метода
Правильный ответ: b.
Manager наследует work() от Employee, поэтому вызов person.work() напечатает Employee is working.
Решение 2. Преимущества наследования
Правильный ответ: b, d.
- a — неверно: повышение безопасности данных относится скорее к инкапсуляции.
- b — верно: общая логика пишется один раз.
- c — неверно: скрытие полей относится к инкапсуляции.
- d — верно: наследование позволяет переиспользовать логику родителя.
Решение 3. Ошибка в super()
Ошибка: неверное использование super. Правильно — super().__init__(name). В super() не нужно передавать аргументы вручную.
class Programmer(Employee):
def __init__(self, name: str, language: str) -> None:
super().__init__(name)
self.language = language
Решение 4. Результат issubclass
Ответ: возникнет TypeError, потому что issubclass() принимает класс, а не объект. В переменной b находится экземпляр класса Book.
Решение 5. Назначение isinstance
Правильный ответ: a. isinstance проверяет, является ли объект экземпляром заданного класса или его наследников.
Решение 6. Класс Employee
class Employee:
def __init__(self, name: str) -> None:
self.name = name
def work(self) -> None:
print(f"{self.name} is working...")
e = Employee("Alice")
e.work()
Решение 7. Класс Developer
class Developer(Employee):
def __init__(self, name: str, language: str) -> None:
super().__init__(name)
self.language = language
def work(self) -> None:
super().work()
print(f"{self.name} writes {self.language} code.")
d = Developer("Bob", "Python")
d.work()
Проверить по документации: аннотации типов в решениях выходят за рамки исходного материала. Подробнее см. typing.