Добавлено в Python 3.14.
В модуле io добавлены два новых протокола статической типизации, которые можно использовать для аннотирования функций и методов, работающих с потоками ввода/вывода:
io.Reader[T] - протокол для чтения из файла или другого входного потока,io.Writer[T] - протокол для записи в файл или другой выходной поток.Эти протоколы помечены декоратором @typing.runtime_checkable, что позволяет проверять типы во время выполнения с помощью isinstance().
io.Reader[T]:Класс io.Reader представляет собой обобщённый протокол для чтения из файла или другого входного потока.
Параметр T обычно представляет тип данных, считываемых из потока - например, str или bytes. НО он может быть любым типом, который поддерживает операцию чтения.
Пример использования:
from io import Reader def read_it(reader: Reader[str]): data = reader.read(11) assert isinstance(data, str)
io.Reader[T]read():read(size, /):Читает данные из потока.
size (целое число), будет прочитано не более size элементов (байтов или символов).T.io.Writer[T]:Класс io.Writer[T] представляет собой обобщённый протокол для записи в файл или другой выходной поток.
Параметр T указывает тип данных, которые могут быть записаны в поток - например, str или bytes. Также может быть любым подходящим типом.
Пример использования:
from io import Writer def write_binary(writer: Writer[bytes]): writer.write(b"Hello world!\n")
io.Writer[T]write(data, /):Записывает данные в поток.
data — данные типа T.Reader и Writer) являются протоколами.@typing.runtime_checkable.def process(stream: Reader[bytes]) -> None: ...