Python Glossary English

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