Python 3.5+typingterm
typing.SupportsFloat
Supports* protocols
A runtime-checkable protocol for objects supporting float() (has __float__).
Syntax
isinstance(obj, typing.SupportsFloat)
Gotcha: str has no __float__ — float('3.14') parses the string through a separate path, so isinstance('3.14', SupportsFloat) is False. But int, bool and Decimal pass, since they do define __float__.
Examples
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
See also
Open in the full glossarydocs.python.orgReport an inaccuracy