gh-101100: Fix Sphinx nitpicks in library/collections.abc.rst (#113116)

This commit is contained in:
Alex Waygood 2023-12-14 19:25:55 +00:00 committed by GitHub
parent 93cf7358d9
commit 006355b2a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 41 deletions

View file

@ -245,10 +245,11 @@ nitpick_ignore += [
# be resolved, as the method is currently undocumented. For context, see # be resolved, as the method is currently undocumented. For context, see
# https://github.com/python/cpython/pull/103289. # https://github.com/python/cpython/pull/103289.
('py:meth', '_SubParsersAction.add_parser'), ('py:meth', '_SubParsersAction.add_parser'),
# Attributes that definitely should be documented better, # Attributes/methods/etc. that definitely should be documented better,
# but are deferred for now: # but are deferred for now:
('py:attr', '__annotations__'), ('py:attr', '__annotations__'),
('py:attr', '__wrapped__'), ('py:attr', '__wrapped__'),
('py:meth', 'index'), # list.index, tuple.index, etc.
] ]
# gh-106948: Copy standard C types declared in the "c:type" domain to the # gh-106948: Copy standard C types declared in the "c:type" domain to the

View file

@ -22,7 +22,7 @@
This module provides :term:`abstract base classes <abstract base class>` that This module provides :term:`abstract base classes <abstract base class>` that
can be used to test whether a class provides a particular interface; for can be used to test whether a class provides a particular interface; for
example, whether it is :term:`hashable` or whether it is a mapping. example, whether it is :term:`hashable` or whether it is a :term:`mapping`.
An :func:`issubclass` or :func:`isinstance` test for an interface works in one An :func:`issubclass` or :func:`isinstance` test for an interface works in one
of three ways. of three ways.
@ -73,7 +73,7 @@ of the API:
>>> isinstance(D(), Sequence) >>> isinstance(D(), Sequence)
True True
In this example, class :class:`D` does not need to define In this example, class :class:`!D` does not need to define
``__contains__``, ``__iter__``, and ``__reversed__`` because the ``__contains__``, ``__iter__``, and ``__reversed__`` because the
:ref:`in-operator <comparisons>`, the :term:`iteration <iterable>` :ref:`in-operator <comparisons>`, the :term:`iteration <iterable>`
logic, and the :func:`reversed` function automatically fall back to logic, and the :func:`reversed` function automatically fall back to
@ -183,14 +183,14 @@ ABC Inherits from Abstract Methods Mi
.. rubric:: Footnotes .. rubric:: Footnotes
.. [1] These ABCs override :meth:`object.__subclasshook__` to support .. [1] These ABCs override :meth:`~abc.ABCMeta.__subclasshook__` to support
testing an interface by verifying the required methods are present testing an interface by verifying the required methods are present
and have not been set to :const:`None`. This only works for simple and have not been set to :const:`None`. This only works for simple
interfaces. More complex interfaces require registration or direct interfaces. More complex interfaces require registration or direct
subclassing. subclassing.
.. [2] Checking ``isinstance(obj, Iterable)`` detects classes that are .. [2] Checking ``isinstance(obj, Iterable)`` detects classes that are
registered as :class:`Iterable` or that have an :meth:`__iter__` registered as :class:`Iterable` or that have an :meth:`~container.__iter__`
method, but it does not detect classes that iterate with the method, but it does not detect classes that iterate with the
:meth:`~object.__getitem__` method. The only reliable way to determine :meth:`~object.__getitem__` method. The only reliable way to determine
whether an object is :term:`iterable` is to call ``iter(obj)``. whether an object is :term:`iterable` is to call ``iter(obj)``.
@ -202,26 +202,27 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: Container .. class:: Container
ABC for classes that provide the :meth:`__contains__` method. ABC for classes that provide the :meth:`~object.__contains__` method.
.. class:: Hashable .. class:: Hashable
ABC for classes that provide the :meth:`__hash__` method. ABC for classes that provide the :meth:`~object.__hash__` method.
.. class:: Sized .. class:: Sized
ABC for classes that provide the :meth:`__len__` method. ABC for classes that provide the :meth:`~object.__len__` method.
.. class:: Callable .. class:: Callable
ABC for classes that provide the :meth:`__call__` method. ABC for classes that provide the :meth:`~object.__call__` method.
.. class:: Iterable .. class:: Iterable
ABC for classes that provide the :meth:`__iter__` method. ABC for classes that provide the :meth:`~container.__iter__` method.
Checking ``isinstance(obj, Iterable)`` detects classes that are registered Checking ``isinstance(obj, Iterable)`` detects classes that are registered
as :class:`Iterable` or that have an :meth:`__iter__` method, but it does as :class:`Iterable` or that have an :meth:`~container.__iter__` method,
but it does
not detect classes that iterate with the :meth:`~object.__getitem__` method. not detect classes that iterate with the :meth:`~object.__getitem__` method.
The only reliable way to determine whether an object is :term:`iterable` The only reliable way to determine whether an object is :term:`iterable`
is to call ``iter(obj)``. is to call ``iter(obj)``.
@ -240,17 +241,17 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: Reversible .. class:: Reversible
ABC for iterable classes that also provide the :meth:`__reversed__` ABC for iterable classes that also provide the :meth:`~object.__reversed__`
method. method.
.. versionadded:: 3.6 .. versionadded:: 3.6
.. class:: Generator .. class:: Generator
ABC for generator classes that implement the protocol defined in ABC for :term:`generator` classes that implement the protocol defined in
:pep:`342` that extends iterators with the :meth:`~generator.send`, :pep:`342` that extends :term:`iterators <iterator>` with the
:meth:`~generator.send`,
:meth:`~generator.throw` and :meth:`~generator.close` methods. :meth:`~generator.throw` and :meth:`~generator.close` methods.
See also the definition of :term:`generator`.
.. versionadded:: 3.5 .. versionadded:: 3.5
@ -261,7 +262,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
ABCs for read-only and mutable :term:`sequences <sequence>`. ABCs for read-only and mutable :term:`sequences <sequence>`.
Implementation note: Some of the mixin methods, such as Implementation note: Some of the mixin methods, such as
:meth:`__iter__`, :meth:`__reversed__` and :meth:`index`, make :meth:`~container.__iter__`, :meth:`~object.__reversed__` and :meth:`index`, make
repeated calls to the underlying :meth:`~object.__getitem__` method. repeated calls to the underlying :meth:`~object.__getitem__` method.
Consequently, if :meth:`~object.__getitem__` is implemented with constant Consequently, if :meth:`~object.__getitem__` is implemented with constant
access speed, the mixin methods will have linear performance; access speed, the mixin methods will have linear performance;
@ -282,7 +283,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: Set .. class:: Set
MutableSet MutableSet
ABCs for read-only and mutable sets. ABCs for read-only and mutable :ref:`sets <types-set>`.
.. class:: Mapping .. class:: Mapping
MutableMapping MutableMapping
@ -299,16 +300,16 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: Awaitable .. class:: Awaitable
ABC for :term:`awaitable` objects, which can be used in :keyword:`await` ABC for :term:`awaitable` objects, which can be used in :keyword:`await`
expressions. Custom implementations must provide the :meth:`__await__` expressions. Custom implementations must provide the
method. :meth:`~object.__await__` method.
:term:`Coroutine <coroutine>` objects and instances of the :term:`Coroutine <coroutine>` objects and instances of the
:class:`~collections.abc.Coroutine` ABC are all instances of this ABC. :class:`~collections.abc.Coroutine` ABC are all instances of this ABC.
.. note:: .. note::
In CPython, generator-based coroutines (generators decorated with In CPython, generator-based coroutines (:term:`generators <generator>`
:func:`types.coroutine`) are decorated with :func:`@types.coroutine <types.coroutine>`) are
*awaitables*, even though they do not have an :meth:`__await__` method. *awaitables*, even though they do not have an :meth:`~object.__await__` method.
Using ``isinstance(gencoro, Awaitable)`` for them will return ``False``. Using ``isinstance(gencoro, Awaitable)`` for them will return ``False``.
Use :func:`inspect.isawaitable` to detect them. Use :func:`inspect.isawaitable` to detect them.
@ -316,17 +317,17 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: Coroutine .. class:: Coroutine
ABC for coroutine compatible classes. These implement the ABC for :term:`coroutine` compatible classes. These implement the
following methods, defined in :ref:`coroutine-objects`: following methods, defined in :ref:`coroutine-objects`:
:meth:`~coroutine.send`, :meth:`~coroutine.throw`, and :meth:`~coroutine.send`, :meth:`~coroutine.throw`, and
:meth:`~coroutine.close`. Custom implementations must also implement :meth:`~coroutine.close`. Custom implementations must also implement
:meth:`__await__`. All :class:`Coroutine` instances are also instances of :meth:`~object.__await__`. All :class:`Coroutine` instances are also
:class:`Awaitable`. See also the definition of :term:`coroutine`. instances of :class:`Awaitable`.
.. note:: .. note::
In CPython, generator-based coroutines (generators decorated with In CPython, generator-based coroutines (:term:`generators <generator>`
:func:`types.coroutine`) are decorated with :func:`@types.coroutine <types.coroutine>`) are
*awaitables*, even though they do not have an :meth:`__await__` method. *awaitables*, even though they do not have an :meth:`~object.__await__` method.
Using ``isinstance(gencoro, Coroutine)`` for them will return ``False``. Using ``isinstance(gencoro, Coroutine)`` for them will return ``False``.
Use :func:`inspect.isawaitable` to detect them. Use :func:`inspect.isawaitable` to detect them.
@ -334,7 +335,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: AsyncIterable .. class:: AsyncIterable
ABC for classes that provide ``__aiter__`` method. See also the ABC for classes that provide an ``__aiter__`` method. See also the
definition of :term:`asynchronous iterable`. definition of :term:`asynchronous iterable`.
.. versionadded:: 3.5 .. versionadded:: 3.5
@ -348,7 +349,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
.. class:: AsyncGenerator .. class:: AsyncGenerator
ABC for asynchronous generator classes that implement the protocol ABC for :term:`asynchronous generator` classes that implement the protocol
defined in :pep:`525` and :pep:`492`. defined in :pep:`525` and :pep:`492`.
.. versionadded:: 3.6 .. versionadded:: 3.6
@ -373,9 +374,9 @@ particular functionality, for example::
Several of the ABCs are also useful as mixins that make it easier to develop Several of the ABCs are also useful as mixins that make it easier to develop
classes supporting container APIs. For example, to write a class supporting classes supporting container APIs. For example, to write a class supporting
the full :class:`Set` API, it is only necessary to supply the three underlying the full :class:`Set` API, it is only necessary to supply the three underlying
abstract methods: :meth:`__contains__`, :meth:`__iter__`, and :meth:`__len__`. abstract methods: :meth:`~object.__contains__`, :meth:`~container.__iter__`, and
The ABC supplies the remaining methods such as :meth:`__and__` and :meth:`~object.__len__`. The ABC supplies the remaining methods such as
:meth:`isdisjoint`:: :meth:`!__and__` and :meth:`~frozenset.isdisjoint`::
class ListBasedSet(collections.abc.Set): class ListBasedSet(collections.abc.Set):
''' Alternate set implementation favoring space over speed ''' Alternate set implementation favoring space over speed
@ -403,23 +404,24 @@ Notes on using :class:`Set` and :class:`MutableSet` as a mixin:
(1) (1)
Since some set operations create new sets, the default mixin methods need Since some set operations create new sets, the default mixin methods need
a way to create new instances from an iterable. The class constructor is a way to create new instances from an :term:`iterable`. The class constructor is
assumed to have a signature in the form ``ClassName(iterable)``. assumed to have a signature in the form ``ClassName(iterable)``.
That assumption is factored-out to an internal classmethod called That assumption is factored-out to an internal :class:`classmethod` called
:meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set. :meth:`!_from_iterable` which calls ``cls(iterable)`` to produce a new set.
If the :class:`Set` mixin is being used in a class with a different If the :class:`Set` mixin is being used in a class with a different
constructor signature, you will need to override :meth:`_from_iterable` constructor signature, you will need to override :meth:`!_from_iterable`
with a classmethod or regular method that can construct new instances from with a classmethod or regular method that can construct new instances from
an iterable argument. an iterable argument.
(2) (2)
To override the comparisons (presumably for speed, as the To override the comparisons (presumably for speed, as the
semantics are fixed), redefine :meth:`__le__` and :meth:`__ge__`, semantics are fixed), redefine :meth:`~object.__le__` and
:meth:`~object.__ge__`,
then the other operations will automatically follow suit. then the other operations will automatically follow suit.
(3) (3)
The :class:`Set` mixin provides a :meth:`_hash` method to compute a hash value The :class:`Set` mixin provides a :meth:`!_hash` method to compute a hash value
for the set; however, :meth:`__hash__` is not defined because not all sets for the set; however, :meth:`~object.__hash__` is not defined because not all sets
are :term:`hashable` or immutable. To add set hashability using mixins, are :term:`hashable` or immutable. To add set hashability using mixins,
inherit from both :meth:`Set` and :meth:`Hashable`, then define inherit from both :meth:`Set` and :meth:`Hashable`, then define
``__hash__ = Set._hash``. ``__hash__ = Set._hash``.

View file

@ -35,7 +35,6 @@ Doc/library/bdb.rst
Doc/library/bisect.rst Doc/library/bisect.rst
Doc/library/calendar.rst Doc/library/calendar.rst
Doc/library/cmd.rst Doc/library/cmd.rst
Doc/library/collections.abc.rst
Doc/library/collections.rst Doc/library/collections.rst
Doc/library/concurrent.futures.rst Doc/library/concurrent.futures.rst
Doc/library/configparser.rst Doc/library/configparser.rst