Python Glossary English

Python 3.6+collectionsпонятие

collections.abc.Collection

collections.abc — протоколы

Протокол-объединение Sized + Iterable + Container (типичный контейнер).

Синтаксис

isinstance(obj, collections.abc.Collection)

Проверка структурная: класс с __len__, __iter__ и __contains__ считается Collection без наследования и регистрации. Отсюда две ловушки — str тоже Collection, так что условие «коллекция, но не строка» приходится писать явно, а генератор и любой итератор ей не являются, потому что у них нет len(). Как аннотация Collection хорош, когда нужны длина и обход, но не нужен доступ по индексу; если нужен порядок и индексы — берите Sequence.

Примеры

import collections.abc as abc
print(isinstance([1], abc.Collection))   # → True
print(isinstance({'a': 1}, abc.Collection))   # → True
print(isinstance('abc', abc.Collection))   # → True
print(isinstance((x for x in [1]), abc.Collection))   # → False
print(issubclass(abc.Collection, abc.Sized))   # → True

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности