collections.abc — Абстрактные базовые классы для контейнеров¶
Добавлено в версии 3.3: Ранее этот модуль был частью модуля collections.
Исходный код: Lib/_collections_abc.py
Модуль предоставляет абстрактные базовые классы, которые могут быть использоваться для проверки, является ли класс конкретным интерфейсом; например, является ли это он хэшируемым или же отображением.
Коллекции абстрактных базовых классов¶
Модуль collections предлагает следующие ABC:
| ABC | Наследуется от | Абстрактные методы | Методы миксин |
|---|---|---|---|
Container |
__contains__ |
||
Hashable |
__hash__ |
||
Iterable |
__iter__ |
||
Iterator |
Iterable |
__next__ |
__iter__ |
Reversible |
Iterable |
__reversed__ |
|
Generator |
Iterator |
send, throw |
close, __iter__, __next__ |
Sized |
__len__ |
||
Callable |
__call__ |
||
Collection |
Sized,
Iterable,
Container |
__contains__,
__iter__,
__len__ |
|
Sequence |
Reversible,
Collection |
__getitem__,
__len__ |
__contains__, __iter__, __reversed__,
index, and count |
MutableSequence |
Sequence |
__getitem__,
__setitem__,
__delitem__,
__len__,
insert |
Унаследует методы Sequence и
append, reverse, extend, pop,
remove, and __iadd__ |
ByteString |
Sequence |
__getitem__,
__len__ |
Унаследует методы Sequence и |
Set |
Collection |
__contains__,
__iter__,
__len__ |
__le__, __lt__, __eq__, __ne__,
__gt__, __ge__, __and__, __or__,
__sub__, __xor__, and isdisjoint |
MutableSet |
Set |
__contains__,
__iter__,
__len__,
add,
discard |
Унаследует методы Set и
clear, pop, remove, __ior__,
__iand__, __ixor__, and __isub__ |
Mapping |
Collection |
__getitem__,
__iter__,
__len__ |
__contains__, keys, items, values,
get, __eq__, and __ne__ |
MutableMapping |
Mapping |
__getitem__,
__setitem__,
__delitem__,
__iter__,
__len__ |
Унаследует методы Mapping и
pop, popitem, clear, update,
and setdefault |
MappingView |
Sized |
__len__ |
|
ItemsView |
MappingView,
Set |
__contains__,
__iter__ |
|
KeysView |
MappingView,
Set |
__contains__,
__iter__ |
|
ValuesView |
MappingView,
Collection |
__contains__, __iter__ |
|
Awaitable |
__await__ |
||
Coroutine |
Awaitable |
send, throw |
close |
AsyncIterable |
__aiter__ |
||
AsyncIterator |
AsyncIterable |
__anext__ |
__aiter__ |
AsyncGenerator |
AsyncIterator |
asend, athrow |
aclose, __aiter__, __anext__ |
-
class
collections.abc.Container¶ ABC для классов, которые предоставляют
__contains__()метод.
-
class
collections.abc.Hashable¶ ABC для классов, которые предоставляют
__hash__()метод.
-
class
collections.abc.Callable¶ ABC для классов, которые предоставляют
__call__()метод.
-
class
collections.abc.Iterable¶ ABC для классов, которые предоставляют
__iter__()метод.Проверка
isinstance(obj, Iterable)обнаруживает классы, которые зарегистрированы какIterableили которые имеют__iter__()способ, но он не определяет классы, которые проходят с__getitem__()метод. Единственный надежный способ определить, является ли объект итерируемым является вызовiter(obj).
-
class
collections.abc.Collection¶ ABC для размерных итераторов классов.
Добавлено в версии 3.6.
-
class
collections.abc.Iterator¶ ABC для классов, которые предоставляют методы
__iter__()и__next__(). См. также определение итератора.
-
class
collections.abc.Reversible¶ ABC для итерируемых классов, которые также обеспечивают
__reversed__()метод.Добавлено в версии 3.6.
-
class
collections.abc.Generator¶ ABC для генератор классы, которые реализуют этот протокол определен в PEP 342, что расширяет итераторы с
send(),throw()иclose()методы. См. также определение генератор.Добавлено в версии 3.5.
-
class
collections.abc.Sequence¶ -
class
collections.abc.MutableSequence¶ -
class
collections.abc.ByteString¶ ABC для только для чтения и изменяемых последовательностей.
Примечание реализации: некоторые методы миксин, таких как
__iter__(),__reversed__()иindex(), выполнить повторение вызовов в основной__getitem__()метод. Следовательно, если__getitem__()осуществляется с постоянной скорость доступа, миксины методы будет иметь линейное представление; однако, если базовый метод линейная (как было бы с связанный список), то примеси будут квадратичной производительности и, вероятно, должны быть переопределены.Изменено в версии 3.5: Методу index() добавлена поддержка stop и start аргументы.
-
class
collections.abc.Set¶ -
class
collections.abc.MutableSet¶ ABC для только для чтения и изменяемых множеств.
-
class
collections.abc.Mapping¶ -
class
collections.abc.MutableMapping¶ ABC для только для чтения и изменяемых отображений.
-
class
collections.abc.MappingView¶ -
class
collections.abc.ItemsView¶ -
class
collections.abc.KeysView¶ -
class
collections.abc.ValuesView¶ ABC для отображения, элементов, ключей и значений представлений.
-
class
collections.abc.Awaitable¶ ABC для awaitable объектов, которые можно использовать в
awaitвыражения. Пользовательские реализации должны предоставлять__await__()метод.Объекты корутины и сущности из
CoroutineABC все сущности этой ABC.Примечание
В с CPython, генератор на основе сопрограмм (генераторы, украшенные
types.coroutine()илиasyncio.coroutine()) являются awaitables, даже если они не имеют__await__()метод. Используяisinstance(gencoro, Awaitable)для них вернетсяFalse. Использоватьinspect.isawaitable()для их обнаружения.Добавлено в версии 3.5.
-
class
collections.abc.Coroutine¶ ABC для сопрограмма совместимы классы. Эти реализовать следующие методы, определенные в Объекты корутины:
send(),throw(), а такжеclose(). Другие реализации также должны реализовываться__await__(). ВсеCoroutineсущности также сущности изAwaitable. См. также определение корутины.Примечание
В с CPython, генератор на основе сопрограмм (генераторы, украшенные
types.coroutine()илиasyncio.coroutine()) являются awaitables, даже если они не имеют__await__()метод. Используяisinstance(gencoro, Coroutine)для них вернетсяFalse. Использоватьinspect.isawaitable()для их обнаружения.Добавлено в версии 3.5.
-
class
collections.abc.AsyncIterable¶ ABC для классов, которые предоставляют
__aiter__метод. См. также определение асинхронный итерабельный.Добавлено в версии 3.5.
-
class
collections.abc.AsyncIterator¶ ABC для классы, которые предоставляют
__aiter__и__anext__методы. См. также определение асинхронный итератор.Добавлено в версии 3.5.
-
class
collections.abc.AsyncGenerator¶ ABC для асинхронных генератор классы, которые реализуют протокол, определенный в PEP 525 и PEP 492.
Добавлено в версии 3.6.
Эти показатели позволяют задать классы или сущности, если они обеспечивают особую функциональность, например:
size = None
if isinstance(myvar, collections.abc.Sized):
size = len(myvar)
Несколько ABC также полезны как примеси, которые делают его проще для
разработки классы вспомогательная контейнер апис. Например, написать
класс поддержки полного Set аПИ, надо только поставить три базовых
абстрактных методов: __contains__(), __iter__(), а также
__len__(). ABC предоставляет остальные методы,
такие как __и__ и :meth:`isdisjoint():
class ListBasedSet(collections.abc.Set):
''' Альтернативная реализация множества, предпочитающая пространство над скоростью
и не требует, чтобы заданные элементы были хэшируемыми. '''
def __init__(self, iterable):
self.elements = lst = []
for value in iterable:
if value not in lst:
lst.append(value)
def __iter__(self):
return iter(self.elements)
def __contains__(self, value):
return value in self.elements
def __len__(self):
return len(self.elements)
s1 = ListBasedSet('abcdef')
s2 = ListBasedSet('defghi')
overlap = s1 & s2 # Метод __and__() поддерживатся автоматически
Примечания по использованию Set и MutableSet как миксин:
- С некоторым набором операций, создавать новые наборы, миксины методы по
умолчанию нужен способ, чтобы создать новый сущности из итерируемый.
Конструктор класс предполагается иметь подпись в виде
ClassName(iterable). Это предположение включаются в внутренний classmethod в называется_from_iterable()которая призываетcls(iterable)производить новый набор. ЕслиSetмиксин будет используемый в класс с разными сигнатурами конструктор, вы должны переопределить_from_iterable()с classmethod в том, что можно построить новый сущности от аргумента итератор. - Переопределить сравнения (предположительно для скорости, семантики
фиксируются), пересмотреть
__le__()и__ge__(), то другие операции будут автоматически следовать его примеру. - В
Setподмешать предоставляет метод_hash()для вычисления значения хэш-функции на множестве; однако,__hash__()не определен, поскольку не все наборы hashable или неизменяемыми. Чтобы добавить набор hashability через миксины, наследуют от обоихSet()иHashable(), затем определить__hash__ = Set._hash.
См.также
- OrderedSet рецепт для примера построена на
MutableSet. - Подробнее о ABC, см. модуль
abcи PEP 3119.
