Python 3.5+typingпонятие
typing.SupportsFloat
протоколы Supports*
Runtime-проверяемый протокол «поддерживает float()» (есть __float__).
Синтаксис
isinstance(obj, typing.SupportsFloat)
Ловушка: str не реализует __float__ — float('3.14') разбирает строку отдельным путём, поэтому isinstance('3.14', SupportsFloat) даёт False. А int, bool и Decimal протокол проходят: у них __float__ есть.
Примеры
from typing import SupportsFloat
print(isinstance(5, SupportsFloat)) # → True
print(isinstance('3.14', SupportsFloat)) # → False
print(issubclass(complex, SupportsFloat)) # → False
from typing import SupportsFloat
class Celsius: __float__ = lambda self: 36.6
print(isinstance(Celsius(), SupportsFloat)) # → True
print(float(Celsius())) # → 36.6
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности