22
22
23
23
This module provides :term: `abstract base classes <abstract base class> ` that
24
24
can be used to test whether a class provides a particular interface; for
25
- example, whether it is :term: `hashable ` or whether it is a mapping.
25
+ example, whether it is :term: `hashable ` or whether it is a :term: ` mapping ` .
26
26
27
27
An :func: `issubclass ` or :func: `isinstance ` test for an interface works in one
28
28
of three ways.
@@ -73,7 +73,7 @@ of the API:
73
73
>>> isinstance (D(), Sequence)
74
74
True
75
75
76
- In this example, class :class: `D ` does not need to define
76
+ In this example, class :class: `! D ` does not need to define
77
77
``__contains__ ``, ``__iter__ ``, and ``__reversed__ `` because the
78
78
:ref: `in-operator <comparisons >`, the :term: `iteration <iterable> `
79
79
logic, and the :func: `reversed ` function automatically fall back to
@@ -182,14 +182,14 @@ ABC Inherits from Abstract Methods Mi
182
182
183
183
.. rubric :: Footnotes
184
184
185
- .. [1 ] These ABCs override :meth: `object .__subclasshook__ ` to support
185
+ .. [1 ] These ABCs override :meth: `~abc.ABCMeta .__subclasshook__ ` to support
186
186
testing an interface by verifying the required methods are present
187
187
and have not been set to :const: `None `. This only works for simple
188
188
interfaces. More complex interfaces require registration or direct
189
189
subclassing.
190
190
191
191
.. [2 ] Checking ``isinstance(obj, Iterable) `` detects classes that are
192
- registered as :class: `Iterable ` or that have an :meth: `__iter__ `
192
+ registered as :class: `Iterable ` or that have an :meth: `~container. __iter__ `
193
193
method, but it does not detect classes that iterate with the
194
194
:meth: `~object.__getitem__ ` method. The only reliable way to determine
195
195
whether an object is :term: `iterable ` is to call ``iter(obj) ``.
@@ -201,26 +201,27 @@ Collections Abstract Base Classes -- Detailed Descriptions
201
201
202
202
.. class :: Container
203
203
204
- ABC for classes that provide the :meth: `__contains__ ` method.
204
+ ABC for classes that provide the :meth: `~object. __contains__ ` method.
205
205
206
206
.. class :: Hashable
207
207
208
- ABC for classes that provide the :meth: `__hash__ ` method.
208
+ ABC for classes that provide the :meth: `~object. __hash__ ` method.
209
209
210
210
.. class :: Sized
211
211
212
- ABC for classes that provide the :meth: `__len__ ` method.
212
+ ABC for classes that provide the :meth: `~object. __len__ ` method.
213
213
214
214
.. class :: Callable
215
215
216
- ABC for classes that provide the :meth: `__call__ ` method.
216
+ ABC for classes that provide the :meth: `~object. __call__ ` method.
217
217
218
218
.. class :: Iterable
219
219
220
- ABC for classes that provide the :meth: `__iter__ ` method.
220
+ ABC for classes that provide the :meth: `~container. __iter__ ` method.
221
221
222
222
Checking ``isinstance(obj, Iterable) `` detects classes that are registered
223
- as :class: `Iterable ` or that have an :meth: `__iter__ ` method, but it does
223
+ as :class: `Iterable ` or that have an :meth: `~container.__iter__ ` method,
224
+ but it does
224
225
not detect classes that iterate with the :meth: `~object.__getitem__ ` method.
225
226
The only reliable way to determine whether an object is :term: `iterable `
226
227
is to call ``iter(obj) ``.
@@ -239,17 +240,17 @@ Collections Abstract Base Classes -- Detailed Descriptions
239
240
240
241
.. class :: Reversible
241
242
242
- ABC for iterable classes that also provide the :meth: `__reversed__ `
243
+ ABC for iterable classes that also provide the :meth: `~object. __reversed__ `
243
244
method.
244
245
245
246
.. versionadded :: 3.6
246
247
247
248
.. class :: Generator
248
249
249
- ABC for generator classes that implement the protocol defined in
250
- :pep: `342 ` that extends iterators with the :meth: `~generator.send `,
250
+ ABC for :term: `generator ` classes that implement the protocol defined in
251
+ :pep: `342 ` that extends :term: `iterators <iterator> ` with the
252
+ :meth: `~generator.send `,
251
253
:meth: `~generator.throw ` and :meth: `~generator.close ` methods.
252
- See also the definition of :term: `generator `.
253
254
254
255
.. versionadded :: 3.5
255
256
@@ -260,7 +261,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
260
261
ABCs for read-only and mutable :term: `sequences <sequence> `.
261
262
262
263
Implementation note: Some of the mixin methods, such as
263
- :meth: `__iter__ `, :meth: `__reversed__ ` and :meth: `index `, make
264
+ :meth: `~container. __iter__ `, :meth: `~object. __reversed__ ` and :meth: `index `, make
264
265
repeated calls to the underlying :meth: `~object.__getitem__ ` method.
265
266
Consequently, if :meth: `~object.__getitem__ ` is implemented with constant
266
267
access speed, the mixin methods will have linear performance;
@@ -275,7 +276,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
275
276
.. class :: Set
276
277
MutableSet
277
278
278
- ABCs for read-only and mutable sets.
279
+ ABCs for read-only and mutable :ref: ` sets < types-set >` .
279
280
280
281
.. class :: Mapping
281
282
MutableMapping
@@ -292,42 +293,42 @@ Collections Abstract Base Classes -- Detailed Descriptions
292
293
.. class :: Awaitable
293
294
294
295
ABC for :term: `awaitable ` objects, which can be used in :keyword: `await `
295
- expressions. Custom implementations must provide the :meth: ` __await__ `
296
- method.
296
+ expressions. Custom implementations must provide the
297
+ :meth: ` ~object.__await__ ` method.
297
298
298
299
:term: `Coroutine <coroutine> ` objects and instances of the
299
300
:class: `~collections.abc.Coroutine ` ABC are all instances of this ABC.
300
301
301
302
.. note ::
302
- In CPython, generator-based coroutines (generators decorated with
303
- :func: `types.coroutine `) are
304
- *awaitables *, even though they do not have an :meth: `__await__ ` method.
303
+ In CPython, generator-based coroutines (:term: ` generators <generator> `
304
+ decorated with :func: `@ types.coroutine <types.coroutine> `) are
305
+ *awaitables *, even though they do not have an :meth: `~object. __await__ ` method.
305
306
Using ``isinstance(gencoro, Awaitable) `` for them will return ``False ``.
306
307
Use :func: `inspect.isawaitable ` to detect them.
307
308
308
309
.. versionadded :: 3.5
309
310
310
311
.. class :: Coroutine
311
312
312
- ABC for coroutine compatible classes. These implement the
313
+ ABC for :term: ` coroutine ` compatible classes. These implement the
313
314
following methods, defined in :ref: `coroutine-objects `:
314
315
:meth: `~coroutine.send `, :meth: `~coroutine.throw `, and
315
316
:meth: `~coroutine.close `. Custom implementations must also implement
316
- :meth: `__await__ `. All :class: `Coroutine ` instances are also instances of
317
- :class: ` Awaitable `. See also the definition of :term: ` coroutine `.
317
+ :meth: `~object. __await__ `. All :class: `Coroutine ` instances are also
318
+ instances of :class: ` Awaitable `.
318
319
319
320
.. note ::
320
- In CPython, generator-based coroutines (generators decorated with
321
- :func: `types.coroutine `) are
322
- *awaitables *, even though they do not have an :meth: `__await__ ` method.
321
+ In CPython, generator-based coroutines (:term: ` generators <generator> `
322
+ decorated with :func: `@ types.coroutine <types.coroutine> `) are
323
+ *awaitables *, even though they do not have an :meth: `~object. __await__ ` method.
323
324
Using ``isinstance(gencoro, Coroutine) `` for them will return ``False ``.
324
325
Use :func: `inspect.isawaitable ` to detect them.
325
326
326
327
.. versionadded :: 3.5
327
328
328
329
.. class :: AsyncIterable
329
330
330
- ABC for classes that provide ``__aiter__ `` method. See also the
331
+ ABC for classes that provide an ``__aiter__ `` method. See also the
331
332
definition of :term: `asynchronous iterable `.
332
333
333
334
.. versionadded :: 3.5
@@ -341,7 +342,7 @@ Collections Abstract Base Classes -- Detailed Descriptions
341
342
342
343
.. class :: AsyncGenerator
343
344
344
- ABC for asynchronous generator classes that implement the protocol
345
+ ABC for :term: ` asynchronous generator ` classes that implement the protocol
345
346
defined in :pep: `525 ` and :pep: `492 `.
346
347
347
348
.. versionadded :: 3.6
@@ -359,9 +360,9 @@ particular functionality, for example::
359
360
Several of the ABCs are also useful as mixins that make it easier to develop
360
361
classes supporting container APIs. For example, to write a class supporting
361
362
the full :class: `Set ` API, it is only necessary to supply the three underlying
362
- abstract methods: :meth: `__contains__ `, :meth: `__iter__ `, and :meth: ` __len__ `.
363
- The ABC supplies the remaining methods such as :meth: ` __and__ ` and
364
- :meth: `isdisjoint `::
363
+ abstract methods: :meth: `~object. __contains__ `, :meth: `~container. __iter__ `, and
364
+ :meth: ` ~object.__len__ `. The ABC supplies the remaining methods such as
365
+ :meth: `!__and__ ` and :meth: ` ~frozenset. isdisjoint `::
365
366
366
367
class ListBasedSet(collections.abc.Set):
367
368
''' Alternate set implementation favoring space over speed
@@ -389,23 +390,24 @@ Notes on using :class:`Set` and :class:`MutableSet` as a mixin:
389
390
390
391
(1)
391
392
Since some set operations create new sets, the default mixin methods need
392
- a way to create new instances from an iterable. The class constructor is
393
+ a way to create new instances from an :term: ` iterable ` . The class constructor is
393
394
assumed to have a signature in the form ``ClassName(iterable) ``.
394
- That assumption is factored-out to an internal classmethod called
395
- :meth: `_from_iterable ` which calls ``cls(iterable) `` to produce a new set.
395
+ That assumption is factored-out to an internal :class: ` classmethod ` called
396
+ :meth: `! _from_iterable ` which calls ``cls(iterable) `` to produce a new set.
396
397
If the :class: `Set ` mixin is being used in a class with a different
397
- constructor signature, you will need to override :meth: `_from_iterable `
398
+ constructor signature, you will need to override :meth: `! _from_iterable `
398
399
with a classmethod or regular method that can construct new instances from
399
400
an iterable argument.
400
401
401
402
(2)
402
403
To override the comparisons (presumably for speed, as the
403
- semantics are fixed), redefine :meth: `__le__ ` and :meth: `__ge__ `,
404
+ semantics are fixed), redefine :meth: `~object.__le__ ` and
405
+ :meth: `~object.__ge__ `,
404
406
then the other operations will automatically follow suit.
405
407
406
408
(3)
407
- The :class: `Set ` mixin provides a :meth: `_hash ` method to compute a hash value
408
- for the set; however, :meth: `__hash__ ` is not defined because not all sets
409
+ The :class: `Set ` mixin provides a :meth: `! _hash ` method to compute a hash value
410
+ for the set; however, :meth: `~object. __hash__ ` is not defined because not all sets
409
411
are :term: `hashable ` or immutable. To add set hashability using mixins,
410
412
inherit from both :meth: `Set ` and :meth: `Hashable `, then define
411
413
``__hash__ = Set._hash ``.
0 commit comments