Python Glossary English

Python 3.12+inspectпонятие

inspect.BufferFlags

буферный протокол

Флаги enum.IntFlag, которые передаются методу __buffer__ при запросе буфера (memoryview и т. п.). Появились в 3.12 вместе с __buffer__ на Python.

Синтаксис

def __buffer__(self, flags): inspect.BufferFlags(flags)

Пригождаются, когда свой класс отдаёт буфер через __buffer__(self, flags): по флагам видно, что запросил потребитель, например нужна ли запись (WRITABLE). Метод получает простое int — оберните его в BufferFlags(flags), чтобы читать имена. Это IntFlag, и print() показывает число, а не имя: имя даёт .name. memoryview просит FULL_RO.

Примеры

import inspect
F = inspect.BufferFlags
print(F.FULL_RO, F.FULL_RO.name)  # → 284 FULL_RO
print(F.WRITABLE in F.FULL, F.WRITABLE in F.FULL_RO)  # → True False
import inspect
class Buf:
    def __init__(self):
        self.data = bytearray(b'abc')
    def __buffer__(self, flags):
        print(inspect.BufferFlags(flags).name)
        return memoryview(self.data)
print(bytes(memoryview(Buf())))  # → FULL_RO / b'abc'

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности