Python Glossary English

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