✅ Решения заданий

⚠️ Рекомендация: попробуйте решить задания самостоятельно, прежде чем смотреть ответы. Решения — это последняя инстанция, когда собственные попытки исчерпаны.

⚡ Кратко

  • Задание 1: b — Employee is working.
  • Задание 2: b, d.
  • Задание 3: должно быть super().__init__(name).
  • Задание 4: TypeError, потому что issubclass принимает класс, а не объект.
  • Задание 5: a.
  • Задание 6: класс Employee с name и work().
  • Задание 7: класс Developer с super() и переопределённым work().

Решение 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.