Создавайте перегруженные функции, игнорируя ненужные параметры в сигнатуре.Python

Программы на Python
Anonymous
Создавайте перегруженные функции, игнорируя ненужные параметры в сигнатуре.

Сообщение Anonymous »

В поле у ​​меня есть функция с более чем 25 параметрами, возвращающая кортеж[int|None, int|None, int|None].
Только 3 bool code> параметры изменяют тип возвращаемого значения (по одному для каждого элемента кортежа), что означает, что мне нужно всего 8 перегрузок, и я не хочу загромождать перегрузки параметрами, которые не имеют отношения к типу возвращаемого значения.
Код (ни mypy, ниpyright не жалуется):

Код: Выделить всё

from typing import Literal, overload

@overload
def test(switch: Literal[True]) -> int: ...
@overload
def test(switch: Literal[False]) -> None: ...

def test(switch: bool) -> int | None:
return 123 if switch is True else None

test_int: int = test(True)
test_none: None = test(False)
Пока это работает:

Код: Выделить всё

def test(switch: bool, var: str = '') -> int | None:
Я получаю ошибки с обеими сигнатурами, касающимися реализации перегрузки:

Код: Выделить всё

def test(switch: bool, var: str) -> int | None:

Код: Выделить всё

def test(var: str = '', switch: bool = True) -> int | None:
Как изменить подпись перегрузок, чтобы сигнализировать средствам проверки типов о том, что за тип возвращаемого значения отвечает только один параметр, игнорируя все остальные параметры?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -signature

Вернуться в «Python»