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Сообщить о неточности