Python 3.5+typingфункция
typing.overload
декораторы и маркеры
Декоратор для объявления нескольких сигнатур одной функции (перегрузок) для средства проверки типов; во время выполнения перегрузки не имеют тела.
Синтаксис
@typing.overload
Перегрузки — чистая аннотация для проверяльщика типов: во время выполнения тела у них нет, а вызов такой заглушки бросает NotImplementedError. Поэтому после всех @overload обязательно идёт одна обычная реализация без декоратора, которая сама разбирает аргументы, — диспетчеризации по типам, как в C++ или Java, Python не делает.
Примеры
# Python 3.11+
from typing import overload, get_overloads
print(callable(overload)) # → True
# Python 3.11+
from typing import overload, get_overloads
@overload
def double(x: int) -> int: ...
@overload
def double(x: str) -> str: ...
def double(x): return x * 2 # реализация идёт последней, без @overload
print(double(5)) # → 10
print(double('ab')) # → abab
print(len(get_overloads(double))) # → 2
# Python 3.11+
from typing import overload, get_overloads
@overload
def solo(x: int) -> int: ...
print(solo(1)) # → NotImplementedError (перегрузка без реализации)
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности