Задача курса

Protocol в Python: задача на структурные интерфейсы

Курс «Python для продвинутых: ООП, типизация и тестирование» · урок «Структурные интерфейсы через Protocol»

Условие

Система уведомлений через Protocol

Что уже дано

В редакторе импортирован Protocol и оставлен каркас для интерфейса, двух реализаций, функции рассылки и двух демонстрационных объектов. Никакие уведомители до кода ученика не создаются: после выполнения решения проверяющая система сама создаёт дополнительные экземпляры и вызывает их методы.

Что нужно сделать

Определите на верхнем уровне:

  • class Notifier(Protocol) с методом send(self, message: str) -> None;
  • EmailNotifier, который в __init__ создаёт self.sent: list[str] = [], а в send добавляет f"EMAIL: {message}";
  • SmsNotifier с таким же списком, но строкой f"SMS: {message}";
  • broadcast(notifiers: list[Notifier], message: str) -> None, вызывающую send(message) у каждого элемента;
  • объекты email = EmailNotifier() и sms = SmsNotifier(), после чего вызовите broadcast([email, sms], "Тест").

EmailNotifier и SmsNotifier не должны наследоваться от Notifier: совместимость обеспечивается структурой методов.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно. Сообщение передаётся обычным аргументом message: str; получатели передаются списком объектов в broadcast. Результат send и broadcast — None, а наблюдаемый эффект хранится в списке sent каждого объекта.

Пример использования

email = EmailNotifier()
sms = SmsNotifier()
broadcast([email, sms], "Сборка готова")
print(email.sent)
print(sms.sent)

Результат:

['EMAIL: Сборка готова']
['SMS: Сборка готова']

Попробуйте решить

РешениеPython
Без регистрации · результат не сохраняется