Правильный ввод функции с аргументом CallablePython

Программы на Python
Anonymous
Правильный ввод функции с аргументом Callable

Сообщение Anonymous »

У меня есть асинхронная функция, которая принимает на вход список, который может содержать значения CustomType1 или CustomType2. Он также принимает функцию в качестве второго аргумента. На данный момент я просто использую Callable[..., Coroutine[Any, Any, CustomType3]], но мне хотелось бы правильно ввести аргумент функции.

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

    async def func1(
arg1: list[CustomType1 | CustomType2],
fn: Callable[..., Coroutine[Any, Any, CustomType3]],
**kwargs: str,
) -> list[CustomType3]:

return list(await asyncio.gather(*(fn(value, **kwargs) for value in arg1)))
У меня есть две функции с разными сигнатурами, которые можно передать в func1:

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

async def fn1(
arg1: CustomType1,
arg2: str,
arg3: str
) -> CustomType3: ...

async def fn2(
arg1: CustomType2
) -> CustomType3: ...
Я пробовал

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

fn: Callable[[CustomType1 | CustomType2, ...], Coroutine[Any, Any, CustomType3]]
но mypy выдает следующие ошибки:
  • Код: Выделить всё

    Unexpected "..."
    : в строке ввода аргумента fn
  • Код: Выделить всё

    Too few arguments
    : в строке, куда возвращается func1
  • Код: Выделить всё

    Argument 2 to "func1" has incompatible type "Callable[[CustomType1, str, str], Coroutine[Any, Any, CustomType3]]"; expected "Callable[[CustomType1 | CustomType2, Any], Coroutine[Any, Any, CustomType3]]"
    : везде, где я вызываю fn1, и аналогичная ошибка при вызове fn2.
Я также пробовал пройти через https://mypy.readthedocs .io/en/stable/protocols.html#callback-protocols, но мне кажется, что я немного запутался. Ищу какие-либо подсказки о том, как подойти к этому.
(Я использую версию mypy 1.10.0, если это актуально)

Подробнее здесь: https://stackoverflow.com/questions/786 ... e-argument

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