Python Glossary English

Python 3.3+collectionsпонятие

collections.abc.Container

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

Протокол «поддерживает проверку in» (есть __contains__).

Синтаксис

isinstance(obj, collections.abc.Container)

Проверка isinstance смотрит ровно на одно — есть ли __contains__, — а оператор in работает шире: когда __contains__ нет, Python перебирает объект через __iter__ или через старый __getitem__ с целыми индексами. Поэтому объект вполне может поддерживать in и при этом не быть Container. В обратную сторону тоже осторожно: Container ничего не обещает ни про len(), ни про перебор — за это отвечают Sized и Iterable.

Примеры

import collections.abc as abc
print(isinstance([1], abc.Container))   # → True
print(isinstance('abc', abc.Container))   # → True
print(isinstance({'a': 1}, abc.Container))   # → True
print(isinstance(iter([1]), abc.Container))   # → False
print(1 in iter([1, 2]))   # → True

См. также

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