I cannot wrap my head around type hinting a Coroutine
. As far as I understand, when we declare a function like so:
async def some_function(arg1: int, arg2: str) -> list:
...
we effectively declare a function, which returns a coroutine, which, when awaited, returns a list. So, the way to type hint it would be:
f: Callable[[int, str], Coroutine[???]] = some_function
But Coroutine
generic type has 3 arguments! We can see it if we go to the typing.py
file:
...
Coroutine = _alias(collections.abc.Coroutine, 3)
...
There is also Awaitable
type, which logically should be a parent of Coroutine
with only one generic parameter (the return type, I suppose):
...
Awaitable = _alias(collections.abc.Awaitable, 1)
...
So maybe it would be more or less correct to type hint the function this way:
f: Callable[[int, str], Awaitable[list]] = some_function
Or is it?
So, basically, the questions are:
- Can one use
Awaitable
instead ofCoroutine
in the case of type hinting anasync def
function? - What are the correct parameters for the
Coroutine
generic type and what are its use-cases?