Задача курса
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: Сборка готова']
