Python Glossary English

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