Python Glossary English

Python 3.3+collectionsпонятие

collections.abc.Sized

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

Протокол «имеет длину» (есть __len__).

Синтаксис

isinstance(obj, collections.abc.Sized)

Проверка структурная: isinstance вернёт True для любого класса, где определён __len__, — наследовать или регистрировать ничего не нужно. Sized ничего не говорит об итерируемости и индексации, и наоборот: генератор итерируем, но не Sized, поэтому len() на нём падает — именно этот случай Sized и позволяет отсеять заранее.

Примеры

import collections.abc as abc
print(isinstance([1, 2], abc.Sized))   # → True
print(isinstance('hello', abc.Sized), isinstance({'a': 1}, abc.Sized))   # → True True
print(isinstance(42, abc.Sized))   # → False
print(isinstance((i for i in range(3)), abc.Sized))   # → False
print(issubclass(abc.Sequence, abc.Sized), issubclass(abc.Iterator, abc.Sized))   # → True False

См. также

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