Spec-Zone.ru › Python 3.9

collections.abc — Абстрактные базовые классы для контейнеров

Новое в версии 3.3: Ранее этот модуль был частью модуля collections.

Исходный код: Lib/_collections_abc.py

Этот модуль предоставляет абстрактные базовые классы, которые могут использоваться для проверки, предоставляет ли класс определённый интерфейс; например, является ли он хешируемым или является ли он отображением.

Новое в версии 3.9: Эти абстрактные классы теперь поддерживают []. См. Тип обобщённого псевдонима и PEP 585.

Абстрактные базовые классы коллекций

Модуль 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, и count

MutableSequence

Sequence

__getitem__, __setitem__, __delitem__, __len__, insert

Наследуемые Sequence методы и append, reverse, extend, pop, remove, и __iadd__

ByteString

Sequence

__getitem__, __len__

Наследуемые Sequence методы

Set

Collection

__contains__, __iter__, __len__

__le__, __lt__, __eq__, __ne__, __gt__, __ge__, __and__, __or__, __sub__, __xor__, и isdisjoint

MutableSet

Set

__contains__, __iter__, __len__, add, discard

Наследуемые Set методы и clear, pop, remove, __ior__, __iand__, __ixor__, и __isub__

Mapping

Collection

__getitem__, __iter__, __len__

__contains__, keys, items, values, get, __eq__, и __ne__

MutableMapping

Mapping

__getitem__, __setitem__, __delitem__, __iter__, __len__

Наследуемые Mapping методы и pop, popitem, clear, update, и 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__

END_OF_DOCUMENT_MARKER
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 для классов контейнеров, которые являются итерируемыми и имеют размер.

New in version 3.6.

class collections.abc.Iterator

ABC для классов, предоставляющих методы __iter__() и __next__(). Смотрите также определение итератора.

class collections.abc.Reversible

ABC для итерируемых классов, которые также предоставляют метод __reversed__().

New in version 3.6.

class collections.abc.Generator

ABC для классов-генераторов, которые реализуют протокол, определенный в PEP 342, который расширяет итераторы методами send(), throw() и close(). Смотрите также определение генератора.

New in version 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 для ожидаемых объектов, которые могут использоваться в выражениях await. Собственные реализации должны предоставлять метод __await__().

Объекты-корутины и экземпляры ABC Coroutine являются экземплярами этого ABC.

Примечание

В CPython, генераторы-корутины (генераторы, декорированные types.coroutine() или asyncio.coroutine()) являются ожидаемыми, даже если у них нет метода __await__(). Использование isinstance(gencoro, Awaitable) для них вернёт False. Используйте inspect.isawaitable() для их обнаружения.

New in version 3.5.

class collections.abc.Coroutine

ABC для совместимых с корутинами классов. Они реализуют следующие методы, определенные в Объекты корутины: send(), throw() и close(). Собственные реализации также должны реализовывать __await__(). Все экземпляры Coroutine также являются экземплярами Awaitable. Смотрите также определение корутины.

Примечание

В CPython генераторы-корутины (генераторы, декорированные types.coroutine() или asyncio.coroutine()) являются ожидаемыми, даже если у них нет метода __await__(). Использование isinstance(gencoro, Coroutine) для них вернёт False. Используйте inspect.isawaitable() для их обнаружения.

New in version 3.5.

class collections.abc.AsyncIterable

ABC для классов, предоставляющих метод __aiter__. Смотрите также определение асинхронного итерируемого объекта.

New in version 3.5.

class collections.abc.AsyncIterator

ABC для классов, предоставляющих методы __aiter__ и __anext__. См. также определение асинхронного итератора.

Новая в версии 3.5.

class collections.abc.AsyncGenerator

ABC для классов асинхронных генераторов, реализующих протокол, определённый в PEP 525 и PEP 492.

Новая в версии 3.6.

Эти ABC позволяют нам спрашивать у классов или экземпляров, обладают ли они определёнными возможностями, например:

size = None
if isinstance(myvar, collections.abc.Sized):
    size = len(myvar)

Несколько ABC также полезны в качестве миксинов, что упрощает разработку классов, поддерживающих контейнерные API. Например, чтобы написать класс, поддерживающий полный API Set, достаточно предоставить три основных абстрактных метода: __contains__(), __iter__() и __len__(). ABC предоставляет остальные методы, такие как __and__() и isdisjoint():

class ListBasedSet(collections.abc.Set):
    ''' Alternate set implementation favoring space over speed
        and not requiring the set elements to be hashable. '''
    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            # The __and__() method is supported automatically

Примечания по использованию Set и MutableSet в качестве миксинов:

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

См. также

  • Рецепт OrderedSet для примера, построенного на MutableSet.
  • Подробнее об ABC см. модуль abc и PEP 3119.

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/collections.abc.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API