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Сообщить о неточности