Python Glossary English

Python 3.6+collectionsпонятие

collections.abc.Reversible

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

Протокол «можно перебрать в обратном порядке» (есть __reversed__).

Синтаксис

isinstance(obj, collections.abc.Reversible)

Проверка смотрит только на наличие __reversed__ и __iter__, а функция reversed() довольствуется и парой __len__ плюс __getitem__ — поэтому свой класс с обычным протоколом последовательности прекрасно развернётся, но isinstance на Reversible вернёт False. Если хотите, чтобы совпадало, наследуйтесь от Sequence: она уже объявлена Reversible. Генераторы и обычные итераторы сюда не входят — развернуть поток, у которого не известен конец, невозможно.

Примеры

import collections.abc as abc
print(isinstance([1], abc.Reversible))   # → True
print(isinstance(range(3), abc.Reversible))   # → True
print(isinstance({'a': 1, 'b': 2}, abc.Reversible))   # → True
print(list(reversed({'a': 1, 'b': 2})))   # → ['b', 'a']
print(isinstance({1, 2}, abc.Reversible))   # → False
print(isinstance((x for x in [1, 2]), abc.Reversible))   # → False

См. также

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