Check

Типизация: Protocol и duck typing

Python Senior Яндекс
Что такое `typing.Protocol` и чем он отличается от обычного абстрактного базового класса (ABC)? Приведите пример duck typing через `Protocol`.
Ответы
Protocol
`Protocol` описывает структурный тип (по набору методов/атрибутов), а не иерархию наследования. Класс считается соответствующим `Protocol`, если у него есть нужные атрибуты, даже если он не наследует этот протокол. Пример: ```python from typing import Protocol class SupportsClose(Protocol): def close(self) -> None: ... def cleanup(res: SupportsClose) -> None: res.close() class FileWrapper: def close(self) -> None: ... cleanup(FileWrapper()) # типchecker доволен ``` В отличие от ABC (`abc.ABC`), где требуется явное наследование, `Protocol` поддерживает duck typing на уровне type checker.