:class:`AsyncIterable` [1]_ ``__aiter__``
:class:`AsyncIterator` [1]_ :class:`AsyncIterable` ``__anext__`` ``__aiter__``
:class:`AsyncGenerator` [1]_ :class:`AsyncIterator` ``asend``, ``athrow`` ``aclose``, ``__aiter__``, ``__anext__``
+:class:`Buffer` [1]_ ``__buffer__``
============================== ====================== ======================= ====================================================
.. versionadded:: 3.6
+.. class:: Buffer
+
+ ABC for classes that provide the :meth:`~object.__buffer__` method,
+ implementing the :ref:`buffer protocol <bufferobjects>`. See :pep:`688`.
+
+ .. versionadded:: 3.12
+
Examples and Recipes
--------------------
for any introspection needs.
+Buffer flags
+------------
+
+.. class:: BufferFlags
+
+ This is an :class:`enum.IntFlag` that represents the flags that
+ can be passed to the :meth:`~object.__buffer__` method of objects
+ implementing the :ref:`buffer protocol <bufferobjects>`.
+
+ The meaning of the flags is explained at :ref:`buffer-request-types`.
+
+ .. attribute:: BufferFlags.SIMPLE
+ .. attribute:: BufferFlags.WRITABLE
+ .. attribute:: BufferFlags.FORMAT
+ .. attribute:: BufferFlags.ND
+ .. attribute:: BufferFlags.STRIDES
+ .. attribute:: BufferFlags.C_CONTIGUOUS
+ .. attribute:: BufferFlags.F_CONTIGUOUS
+ .. attribute:: BufferFlags.ANY_CONTIGUOUS
+ .. attribute:: BufferFlags.INDIRECT
+ .. attribute:: BufferFlags.CONTIG
+ .. attribute:: BufferFlags.CONTIG_RO
+ .. attribute:: BufferFlags.STRIDED
+ .. attribute:: BufferFlags.STRIDED_RO
+ .. attribute:: BufferFlags.RECORDS
+ .. attribute:: BufferFlags.RECORDS_RO
+ .. attribute:: BufferFlags.FULL
+ .. attribute:: BufferFlags.FULL_RO
+ .. attribute:: BufferFlags.READ
+ .. attribute:: BufferFlags.WRITE
+
+ .. versionadded:: 3.12
+
.. _inspect-module-cli:
Command Line Interface
The specification for the Python ``match`` statement.
+.. _python-buffer-protocol:
+
+Emulating buffer types
+----------------------
+
+The :ref:`buffer protocol <bufferobjects>` provides a way for Python
+objects to expose efficient access to a low-level memory array. This protocol
+is implemented by builtin types such as :class:`bytes` and :class:`memoryview`,
+and third-party libraries may define additional buffer types.
+
+While buffer types are usually implemented in C, it is also possible to
+implement the protocol in Python.
+
+.. method:: object.__buffer__(self, flags)
+
+ Called when a buffer is requested from *self* (for example, by the
+ :class:`memoryview` constructor). The *flags* argument is an integer
+ representing the kind of buffer requested, affecting for example whether
+ the returned buffer is read-only or writable. :class:`inspect.BufferFlags`
+ provides a convenient way to interpret the flags. The method must return
+ a :class:`memoryview` object.
+
+.. method:: object.__release_buffer__(self, buffer)
+
+ Called when a buffer is no longer needed. The *buffer* argument is a
+ :class:`memoryview` object that was previously returned by
+ :meth:`~object.__buffer__`. The method must release any resources associated
+ with the buffer. This method should return ``None``.
+ Buffer objects that do not need to perform any cleanup are not required
+ to implement this method.
+
+.. versionadded:: 3.12
+
+.. seealso::
+
+ :pep:`688` - Making the buffer protocol accessible in Python
+ Introduces the Python ``__buffer__`` and ``__release_buffer__`` methods.
+
+ :class:`collections.abc.Buffer`
+ ABC for buffer types.
+
.. _special-lookup:
Special method lookup
In Python 3.14, the default will switch to ``'data'``.
(Contributed by Petr Viktorin in :pep:`706`.)
+PEP 688: Making the buffer protocol accessible in Python
+--------------------------------------------------------
+
+:pep:`688` introduces a way to use the :ref:`buffer protocol <bufferobjects>`
+from Python code. Classes that implement the :meth:`~object.__buffer__` method
+are now usable as buffer types.
+
+The new :class:`collections.abc.Buffer` ABC provides a standard
+way to represent buffer objects, for example in type annotations.
+The new :class:`inspect.BufferFlags` enum represents the flags that
+can be used to customize buffer creation.
+(Contributed by Jelle Zijlstra in :gh:`102500`.)
+
New Features Related to Type Hints
==================================
(PEP written by Franek Magiera)
-
Other Language Changes
======================