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