Python 3.5+typingпонятие
typing.SupportsAbs
протоколы Supports*
Runtime-проверяемый протокол «поддерживает abs()» (есть __abs__).
Синтаксис
isinstance(obj, typing.SupportsAbs)
Главное назначение — аннотация параметра: пометить, что функции годится любой объект с abs(), не привязываясь к конкретному классу. Протокол параметризован типом результата — SupportsAbs[float] уточняет, что abs() вернёт float. isinstance здесь проверяет лишь наличие метода __abs__, но не его сигнатуру и не тип возврата.
Примеры
from typing import SupportsAbs
print(isinstance(5, SupportsAbs)) # → True
print(isinstance('abc', SupportsAbs)) # → False
from typing import SupportsAbs
class Money: __abs__ = lambda self: 42
print(isinstance(Money(), SupportsAbs)) # → True
print(abs(Money())) # → 42
print(issubclass(complex, SupportsAbs)) # → True
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности