Skip to content

Commit 8e96adf

Browse files
authored
gh-130159: Fix list indentation in collections.abc (#130165)
1 parent 38642bf commit 8e96adf

File tree

1 file changed

+55
-56
lines changed

1 file changed

+55
-56
lines changed

Doc/library/collections.abc.rst

+55-56
Original file line numberDiff line numberDiff line change
@@ -28,81 +28,80 @@ An :func:`issubclass` or :func:`isinstance` test for an interface works in one
2828
of three ways.
2929

3030
1) A newly written class can inherit directly from one of the
31-
abstract base classes. The class must supply the required abstract
32-
methods. The remaining mixin methods come from inheritance and can be
33-
overridden if desired. Other methods may be added as needed:
31+
abstract base classes. The class must supply the required abstract
32+
methods. The remaining mixin methods come from inheritance and can be
33+
overridden if desired. Other methods may be added as needed:
3434

35-
.. testcode::
35+
.. testcode::
3636

37-
class C(Sequence): # Direct inheritance
38-
def __init__(self): ... # Extra method not required by the ABC
39-
def __getitem__(self, index): ... # Required abstract method
40-
def __len__(self): ... # Required abstract method
41-
def count(self, value): ... # Optionally override a mixin method
37+
class C(Sequence): # Direct inheritance
38+
def __init__(self): ... # Extra method not required by the ABC
39+
def __getitem__(self, index): ... # Required abstract method
40+
def __len__(self): ... # Required abstract method
41+
def count(self, value): ... # Optionally override a mixin method
4242

43-
.. doctest::
43+
.. doctest::
4444

45-
>>> issubclass(C, Sequence)
46-
True
47-
>>> isinstance(C(), Sequence)
48-
True
45+
>>> issubclass(C, Sequence)
46+
True
47+
>>> isinstance(C(), Sequence)
48+
True
4949

5050
2) Existing classes and built-in classes can be registered as "virtual
51-
subclasses" of the ABCs. Those classes should define the full API
52-
including all of the abstract methods and all of the mixin methods.
53-
This lets users rely on :func:`issubclass` or :func:`isinstance` tests
54-
to determine whether the full interface is supported. The exception to
55-
this rule is for methods that are automatically inferred from the rest
56-
of the API:
51+
subclasses" of the ABCs. Those classes should define the full API
52+
including all of the abstract methods and all of the mixin methods.
53+
This lets users rely on :func:`issubclass` or :func:`isinstance` tests
54+
to determine whether the full interface is supported. The exception to
55+
this rule is for methods that are automatically inferred from the rest
56+
of the API:
5757

58-
.. testcode::
58+
.. testcode::
5959

60-
class D: # No inheritance
61-
def __init__(self): ... # Extra method not required by the ABC
62-
def __getitem__(self, index): ... # Abstract method
63-
def __len__(self): ... # Abstract method
64-
def count(self, value): ... # Mixin method
65-
def index(self, value): ... # Mixin method
60+
class D: # No inheritance
61+
def __init__(self): ... # Extra method not required by the ABC
62+
def __getitem__(self, index): ... # Abstract method
63+
def __len__(self): ... # Abstract method
64+
def count(self, value): ... # Mixin method
65+
def index(self, value): ... # Mixin method
6666

67-
Sequence.register(D) # Register instead of inherit
67+
Sequence.register(D) # Register instead of inherit
6868

69-
.. doctest::
69+
.. doctest::
7070

71-
>>> issubclass(D, Sequence)
72-
True
73-
>>> isinstance(D(), Sequence)
74-
True
71+
>>> issubclass(D, Sequence)
72+
True
73+
>>> isinstance(D(), Sequence)
74+
True
7575

76-
In this example, class :class:`!D` does not need to define
77-
``__contains__``, ``__iter__``, and ``__reversed__`` because the
78-
:ref:`in-operator <comparisons>`, the :term:`iteration <iterable>`
79-
logic, and the :func:`reversed` function automatically fall back to
80-
using ``__getitem__`` and ``__len__``.
76+
In this example, class :class:`!D` does not need to define
77+
``__contains__``, ``__iter__``, and ``__reversed__`` because the
78+
:ref:`in-operator <comparisons>`, the :term:`iteration <iterable>`
79+
logic, and the :func:`reversed` function automatically fall back to
80+
using ``__getitem__`` and ``__len__``.
8181

8282
3) Some simple interfaces are directly recognizable by the presence of
83-
the required methods (unless those methods have been set to
84-
:const:`None`):
83+
the required methods (unless those methods have been set to :const:`None`):
8584

86-
.. testcode::
85+
.. testcode::
8786

88-
class E:
89-
def __iter__(self): ...
90-
def __next__(self): ...
87+
class E:
88+
def __iter__(self): ...
89+
def __next__(self): ...
9190

92-
.. doctest::
91+
.. doctest::
9392

94-
>>> issubclass(E, Iterable)
95-
True
96-
>>> isinstance(E(), Iterable)
97-
True
93+
>>> issubclass(E, Iterable)
94+
True
95+
>>> isinstance(E(), Iterable)
96+
True
9897

99-
Complex interfaces do not support this last technique because an
100-
interface is more than just the presence of method names. Interfaces
101-
specify semantics and relationships between methods that cannot be
102-
inferred solely from the presence of specific method names. For
103-
example, knowing that a class supplies ``__getitem__``, ``__len__``, and
104-
``__iter__`` is insufficient for distinguishing a :class:`Sequence` from
105-
a :class:`Mapping`.
98+
Complex interfaces do not support this last technique because an
99+
interface is more than just the presence of method names. Interfaces
100+
specify semantics and relationships between methods that cannot be
101+
inferred solely from the presence of specific method names. For
102+
example, knowing that a class supplies ``__getitem__``, ``__len__``, and
103+
``__iter__`` is insufficient for distinguishing a :class:`Sequence` from
104+
a :class:`Mapping`.
106105

107106
.. versionadded:: 3.9
108107
These abstract classes now support ``[]``. See :ref:`types-genericalias`

0 commit comments

Comments
 (0)