Python 3.12+collectionsпонятие
collections.abc.Buffer
collections.abc — протоколы
Протокол буфера: объект отдаёт доступ к своей памяти (bytes, bytearray, memoryview; Python 3.12+).
Синтаксис
isinstance(obj, collections.abc.Buffer)
Буферный протокол исторически существовал только на уровне C, и до 3.12 проверить его из Python было нечем; PEP 688 добавил метод __buffer__, так что теперь и обычный питоновский класс может считаться Buffer. Неожиданность: str буфером не является, хотя байты из него получить можно — нужен явный encode(). В аннотациях Buffer — корректная замена устаревшему ByteString, когда функция берёт любые сырые байты, включая memoryview и array.
Примеры
import collections.abc as abc
print(isinstance(b'x', abc.Buffer)) # → True
print(isinstance(bytearray(b'x'), abc.Buffer)) # → True
print(isinstance(memoryview(b'abc'), abc.Buffer)) # → True
print(issubclass(bytes, abc.Buffer)) # → True
print(isinstance('hello', abc.Buffer)) # → False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности