@paper_castle
Фрилансер

Для чего и как применяется @overload в Python?

В PEP 586 приводится такой пример:

_PathType = Union[str, bytes, int]

@overload
def open(path: _PathType,
         mode: Literal["r", "w", "a", "x", "r+", "w+", "a+", "x+"],
         ) -> IO[Text]: ...
@overload
def open(path: _PathType,
         mode: Literal["rb", "wb", "ab", "xb", "r+b", "w+b", "a+b", "x+b"],
         ) -> IO[bytes]: ...

# Fallback overload for when the user isn't using literal types
@overload
def open(path: _PathType, mode: str) -> IO[Any]: ...


А в Django в роутинге есть следующее:
# path()
@overload
def path(
    route: str, view: Callable[..., HttpResponseBase], kwargs: Dict[str, Any] = ..., name: str = ...
) -> URLPattern: ...
@overload
def path(route: str, view: IncludedURLConf, kwargs: Dict[str, Any] = ..., name: str = ...) -> URLResolver: ...
@overload
def path(
    route: str, view: List[Union[URLResolver, str]], kwargs: Dict[str, Any] = ..., name: str = ...
) -> URLResolver: ...


Почему у "перегруженных" методов отсутствует тело и в чем практическая польза?
(только в указании зависимости возвращаемых типов от типов аргументов?)
  • Вопрос задан
  • 1271 просмотр
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Почему у "перегруженных" методов отсутствует тело

Создатели этой документации решили не вставлять тело функции, чтобы просто не засорять документацию.

Перегрузка нужна для передачи другого кол-ва аргументов и/или другого типа аргументов в функцию, сохраняя при этом единое название функции, если можно так сказать конечно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы