Python Glossary English

Python 3.8+typingпонятие

typing.SupportsIndex

протоколы Supports*

Runtime-проверяемый протокол «можно использовать как индекс» (есть __index__); объект приводится к int без потерь.

Синтаксис

isinstance(obj, typing.SupportsIndex)

__index__ отличает «настоящее целое» от float: именно его требуют срезы, range(), hex()/bin()/oct() и operator.index(). Поэтому у float его нет — isinstance(2.0, SupportsIndex) даёт False, тогда как int и bool проходят. Сам протокол появился в Python 3.8.

Примеры

from typing import SupportsIndex
print(isinstance(5, SupportsIndex))   # → True
print(isinstance(2.5, SupportsIndex))  # → False
print(isinstance(True, SupportsIndex))  # → True
from typing import SupportsIndex
class Idx: __index__ = lambda self: 1
print(isinstance(Idx(), SupportsIndex))  # → True
print('abc'[Idx()])  # → b

См. также

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