collections.abc
— Abstract Base Classes for Containers¶
Added in version 3.3: Formerly, this module was part of the collections
module.
Source code: Lib/_collections_abc.py
This module provides abstract base classes that can be used to test whether a class provides a particular interface; for example, whether it is hashable or whether it is a mapping.
An issubclass()
or isinstance()
test for an interface works in one
of three ways.
A newly written class can inherit directly from one of the abstract base classes. The class must supply the required abstract methods. The remaining mixin methods come from inheritance and can be overridden if desired. Other methods may be added as needed:
class C(Sequence): # Direct inheritance def __init__(self): ... # Extra method not required by the ABC def __getitem__(self, index): ... # Required abstract method def __len__(self): ... # Required abstract method def count(self, value): ... # Optionally override a mixin method
>>> issubclass(C, Sequence) True >>> isinstance(C(), Sequence) True
Existing classes and built-in classes can be registered as “virtual subclasses” of the ABCs. Those classes should define the full API including all of the abstract methods and all of the mixin methods. This lets users rely on
issubclass()
orisinstance()
tests to determine whether the full interface is supported. The exception to this rule is for methods that are automatically inferred from the rest of the API:class D: # No inheritance def __init__(self): ... # Extra method not required by the ABC def __getitem__(self, index): ... # Abstract method def __len__(self): ... # Abstract method def count(self, value): ... # Mixin method def index(self, value): ... # Mixin method Sequence.register(D) # Register instead of inherit
>>> issubclass(D, Sequence) True >>> isinstance(D(), Sequence) True
In this example, class
D
does not need to define__contains__
,__iter__
, and__reversed__
because the in-operator, the iteration logic, and thereversed()
function automatically fall back to using__getitem__
and__len__
.Some simple interfaces are directly recognizable by the presence of the required methods (unless those methods have been set to
None
):class E: def __iter__(self): ... def __next__(self): ...
>>> issubclass(E, Iterable) True >>> isinstance(E(), Iterable) True
Complex interfaces do not support this last technique because an interface is more than just the presence of method names. Interfaces specify semantics and relationships between methods that cannot be inferred solely from the presence of specific method names. For example, knowing that a class supplies
__getitem__
,__len__
, and__iter__
is insufficient for distinguishing aSequence
from aMapping
.
Added in version 3.9: These abstract classes now support []
. See Generic Alias Type
and PEP 585.
Collections Abstract Base Classes¶
The collections module offers the following ABCs:
ABC |
Inherits from |
Abstract Methods |
Mixin Methods |
---|---|---|---|
|
|||
|
|||
|
|||
|
|
||
|
|||
|
|
||
|
|||
|
|||
|
|||
|
|
||
|
Inherited |
||
|
Inherited |
||
|
|
||
|
Inherited |
||
|
|
||
|
Inherited |
||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
||
|
|||
|
|
||
|
|
||
|
Footnotes
Collections Abstract Base Classes – Detailed Descriptions¶
- class collections.abc.Container¶
ABC for classes that provide the
__contains__()
method.
- class collections.abc.Hashable¶
ABC for classes that provide the
__hash__()
method.
- class collections.abc.Callable¶
ABC for classes that provide the
__call__()
method.See Annotating callable objects for details on how to use
Callable
in type annotations.
- class collections.abc.Iterable¶
ABC for classes that provide the
__iter__()
method.Checking
isinstance(obj, Iterable)
detects classes that are registered asIterable
or that have an__iter__()
method, but it does not detect classes that iterate with the__getitem__()
method. The only reliable way to determine whether an object is iterable is to calliter(obj)
.
- class collections.abc.Collection¶
ABC for sized iterable container classes.
Added in version 3.6.
- class collections.abc.Iterator¶
ABC for classes that provide the
__iter__()
and__next__()
methods. See also the definition of iterator.
- class collections.abc.Reversible¶
ABC for iterable classes that also provide the
__reversed__()
method.Added in version 3.6.
- class collections.abc.Generator¶
ABC for generator classes that implement the protocol defined in PEP 342 that extends iterators with the
send()
,throw()
andclose()
methods.See Annotating generators and coroutines for details on using
Generator
in type annotations.Added in version 3.5.
- class collections.abc.Sequence¶
- class collections.abc.MutableSequence¶
- class collections.abc.ByteString¶
ABCs for read-only and mutable sequences.
Implementation note: Some of the mixin methods, such as
__iter__()
,__reversed__()
, andindex()
make repeated calls to the underlying__getitem__()
method. Consequently, if__getitem__()
is implemented with constant access speed, the mixin methods will have linear performance; however, if the underlying method is linear (as it would be with a linked list), the mixins will have quadratic performance and will likely need to be overridden.- index(value, start=0, stop=None)¶
Return first index of value.
Raises
ValueError
if the value is not present.Supporting the start and stop arguments is optional, but recommended.
Changed in version 3.5: The
index()
method gained support for the stop and start arguments.
Deprecated since version 3.12, will be removed in version 3.14: The
ByteString
ABC has been deprecated. For use in typing, prefer a union, likebytes | bytearray
, orcollections.abc.Buffer
. For use as an ABC, preferSequence
orcollections.abc.Buffer
.
- class collections.abc.Mapping¶
- class collections.abc.MutableMapping¶
ABCs for read-only and mutable mappings.
- class collections.abc.MappingView¶
- class collections.abc.ItemsView¶
- class collections.abc.KeysView¶
- class collections.abc.ValuesView¶
ABCs for mapping, items, keys, and values views.
- class collections.abc.Awaitable¶
ABC for awaitable objects, which can be used in
await
expressions. Custom implementations must provide the__await__()
method.Coroutine objects and instances of the
Coroutine
ABC are all instances of this ABC.Note
In CPython, generator-based coroutines (generators decorated with
@types.coroutine
) are awaitables, even though they do not have an__await__()
method. Usingisinstance(gencoro, Awaitable)
for them will returnFalse
. Useinspect.isawaitable()
to detect them.Added in version 3.5.
- class collections.abc.Coroutine¶
ABC for coroutine compatible classes. These implement the following methods, defined in Coroutine Objects:
send()
,throw()
, andclose()
. Custom implementations must also implement__await__()
. AllCoroutine
instances are also instances ofAwaitable
.Note
In CPython, generator-based coroutines (generators decorated with
@types.coroutine
) are awaitables, even though they do not have an__await__()
method. Usingisinstance(gencoro, Coroutine)
for them will returnFalse
. Useinspect.isawaitable()
to detect them.See Annotating generators and coroutines for details on using
Coroutine
in type annotations. The variance and order of type parameters correspond to those ofGenerator
.Added in version 3.5.
- class collections.abc.AsyncIterable¶
ABC for classes that provide an
__aiter__
method. See also the definition of asynchronous iterable.Added in version 3.5.
- class collections.abc.AsyncIterator¶
ABC for classes that provide
__aiter__
and__anext__
methods. See also the definition of