Python 3.5+typingпонятие
typing.SupportsComplex
протоколы Supports*
Runtime-проверяемый протокол «поддерживает complex()» (есть __complex__).
Синтаксис
isinstance(obj, typing.SupportsComplex)
Ловушка: int и float не имеют __complex__ — complex(5) и complex(2.0) работают через __index__/__float__, но isinstance(5, SupportsComplex) даёт False. Протокол срабатывает лишь на типах с явно определённым __complex__ (сам complex, ваши классы), а не на всём, что удаётся передать в complex().
Примеры
# Python 3.11+
from typing import SupportsComplex
print(isinstance(3j, SupportsComplex)) # → True
print(isinstance(5, SupportsComplex)) # → False
print(isinstance('3+4j', SupportsComplex)) # → False
from typing import SupportsComplex
class Vec: __complex__ = lambda self: 1+2j
print(isinstance(Vec(), SupportsComplex)) # → True
print(complex(Vec())) # → (1+2j)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности