Python 3.3+collectionsпонятие
collections.abc.Sequence
collections.abc — протоколы
Протокол неизменяемой последовательности: индексация, срезы, len, in (list, tuple, str).
Синтаксис
isinstance(obj, collections.abc.Sequence)
Главная ловушка: str тоже Sequence, поэтому проверка не отличит список строк от одной строки — функция спокойно переберёт её по символам, строку приходится отсеивать отдельной проверкой. Слово «неизменяемая» здесь условно: list тоже Sequence, ведь MutableSequence наследуется от него, и отдельной проверки «менять нельзя» в стандартной библиотеке нет. Наследнику хватает __getitem__ и __len__ — __contains__, __iter__, __reversed__, index и count дают миксины.
Примеры
import collections.abc as abc
print(isinstance([1], abc.Sequence)) # → True
print(isinstance((1,), abc.Sequence)) # → True
print(isinstance('hello', abc.Sequence), isinstance(range(3), abc.Sequence)) # → True True
print(isinstance({1, 2}, abc.Sequence), isinstance({'a': 1}, abc.Sequence)) # → False False
print(isinstance(iter([1, 2]), abc.Sequence)) # → False
print(issubclass(list, abc.MutableSequence), issubclass(tuple, abc.MutableSequence)) # → True False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности