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.Sized

ABC для классов, которые предоставляют __len__() метод.

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 как миксин:

  1. С некоторым набором операций, создавать новые наборы, миксины методы по умолчанию нужен способ, чтобы создать новый сущности из итерируемый. Конструктор класс предполагается иметь подпись в виде ClassName(iterable). Это предположение включаются в внутренний classmethod в называется _from_iterable() которая призывает cls(iterable) производить новый набор. Если Set миксин будет используемый в класс с разными сигнатурами конструктор, вы должны переопределить _from_iterable() с classmethod в том, что можно построить новый сущности от аргумента итератор.
  2. Переопределить сравнения (предположительно для скорости, семантики фиксируются), пересмотреть __le__() и __ge__(), то другие операции будут автоматически следовать его примеру.
  3. В Set подмешать предоставляет метод _hash() для вычисления значения хэш-функции на множестве; однако, __hash__() не определен, поскольку не все наборы hashable или неизменяемыми. Чтобы добавить набор hashability через миксины, наследуют от обоих Set() и Hashable(), затем определить __hash__ = Set._hash.

См.также