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__()
метод.Объекты корутины и сущности из
Coroutine
ABC все сущности этой 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.