Выбор ответа Middle Типизация обновлено
Protocol и структурная типизация
Вопрос
Класс FileStore имеет метод save(self, data: bytes) -> None и не наследуется от Storage(Protocol) с тем же методом. Примет ли анализатор FileStore() там, где ожидается Storage?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Да: Protocol проверяет структуру, наследование не нужно. Протоколы реализуют структурную (утиную) типизацию: подходит любой класс с нужными методами и сигнатурами.
Варианты ответа
- Нет: нужно наследоваться от
Storage - Да:
Protocolпроверяет структуру, наследование не нужноправильный ответ - Нет: нужно вызвать
Storage.register(FileStore) - Да, но только если
Storageпомечен@runtime_checkable
Разбор
Протоколы реализуют структурную (утиную) типизацию: подходит любой класс с нужными методами и сигнатурами. Регистрация через register это механизм abc.ABC. @runtime_checkable нужен только для isinstance во время выполнения, статической проверке он не требуется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.