📝 Практические задания

⚡ Задания в двух словах

  1. Определить порядок поиска метода в иерархии D(B, C).
  2. Выбрать верный вариант назначения super().
  3. Предсказать вывод кода с двумя миксинами.
  4. Сопоставить композицию, агрегацию и вложенный класс с описаниями.
  5. Определить тип связи в классе Course.
  6. Создать класс Student с уведомлениями.
  7. Создать класс Course, который агрегирует студентов.

Задание 1. Порядок поиска метода

Условие: какой будет порядок поиска метода greet и что напечатает код?

class A:
    def greet(self):
        print("Hello from A")


class B(A):
    pass


class C(A):
    def greet(self):
        print("Hello from C")


class D(B, C):
    pass


d = D()
d.greet()

Что должно получиться: порядок классов в MRO и результат вызова.

Задание 2. Назначение super()

Условие: выберите верный вариант ответа.

Для чего используется super() в наследовании?

  • a. Чтобы вызвать метод только родительского класса напрямую.
  • b. Чтобы гибко переходить к следующему методу в MRO.
  • c. Чтобы заменить метод родителя.
  • d. Чтобы обратиться к базовому типу object.

Что должно получиться: буква правильного ответа.

Задание 3. Конфликт имён в миксинах

Условие: что напечатает код?

class SaveMixin:
    def process(self):
        print("Saving...")


class PrintMixin:
    def process(self):
        print("Printing...")


class Document(SaveMixin, PrintMixin):
    pass


doc = Document()
doc.process()
  • a. Saving…
  • b. Printing…
  • c. Ошибка.

Задание 4. Сопоставьте понятия

Условие: сопоставьте понятие с описанием.

  1. Композиция
  2. Агрегация
  3. Вложенный класс
  • a. Класс определён внутри другого класса.
  • b. Объект создаётся и управляется внешним объектом.
  • c. Объект передаётся извне и может существовать отдельно.

Задание 5. Тип связи

Условие: какая связь реализована в коде?

class Course:
    def __init__(self, teacher):
        self.teacher = teacher
  • a. Композиция
  • b. Агрегация

Задание 6. Класс Student

Условие: создайте класс Student, представляющий ученика.

  • При создании указываются имя и email.
  • Добавьте строковое представление студента (например, только имя).
  • Добавьте метод notify(message), который выводит сообщение: Email to <email>: <message>.

Пример вывода:

Alice
Email to alice@example.com: You have been enrolled.

Задание 7. Класс Course

Условие: создайте класс Course, представляющий учебный курс.

  • При создании указывается название курса.
  • У каждого объекта Course должно быть поле students, в котором хранится список зарегистрированных студентов.
  • Добавьте метод add_student(student), который принимает объект Student и добавляет его в курс.
  • Добавьте метод show_students(), который выводит список имён студентов.
  • Добавьте метод notify_all(message), который уведомляет всех студентов курса.

Пример вывода:

Students enrolled in Python OOP:
- Alice
- Bob
Email to alice@example.com: Welcome to the course!
Email to bob@example.com: Welcome to the course!

Проверка понимания

Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.

Вопрос 1

Что такое класс?

Вопрос 2

Что означает self?

Вопрос 3

Какой стиль имён переменных обычно рекомендует PEP 8?

Вопрос 4

Зачем использовать f-strings в современном Python?

Вопрос 5

Когда полезен ранний возврат из функции?

Вопрос 6

Что делает аннотация типа в Python?

Вопрос 7

Как лучше обрабатывать ожидаемую ошибку преобразования?