Python 3.5+typingпонятие
typing.SupportsInt
протоколы Supports*
Runtime-проверяемый протокол «поддерживает int()» (есть __int__).
Синтаксис
isinstance(obj, typing.SupportsInt)
Проверка isinstance(x, SupportsInt) смотрит лишь на наличие метода __int__, а не на то, что int(x) реально сработает. Классическая ловушка: у строки __int__ нет, поэтому isinstance('123', SupportsInt) даёт False, хотя int('123') прекрасно работает — строки разбираются отдельным путём внутри конструктора int.
Примеры
from typing import SupportsInt
print(isinstance(5, SupportsInt)) # → True
print(isinstance(2.9, SupportsInt)) # → True
print(isinstance('5', SupportsInt)) # → False
from typing import SupportsInt
class Rome: __int__ = lambda self: 4
print(isinstance(Rome(), SupportsInt)) # → True
print(int(Rome())) # → 4
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности