Декораторы подбора типов, которые изменяют аргументы функции
Я создаю декоратор и хочу typehint
быть сохраненным. Однако мне нужно немного изменить возвращаемый тип. Документы Mypy содержат информацию о том, как это сделать, если ваша оформленная сигнатура функции такая же, как и исходная, но я не уверен, как это сделать, если тип возвращаемого значения изменен.
В качестве примера приведу мою исходную функцию:
async def simple_func(a: int) -> int:
'Simple sleeper function to test calling mechanics'
return a + 1
Имеет подпись (int) -> Awaitable[int]
.
Вот как я его использую:
t_wrap = make_sync(simple_func)
_ = get_event_loop()
assert t_wrap(4) == 5
Когда я смотрю на тип t_wrap
используя pyright или аналогичный инструмент в моем редакторе, это (*args, **kwargs) -> int
, скорее, чем (int) -> int
.
Моя функция декоратора выглядит следующим образом:
from functools import wraps
from typing import Callable, TypeVar
R = TypeVar('R')
def make_sync(fn: Callable[..., Awaitable[R]]) -> Callable[..., R]:
@wraps(fn)
def sync_version_of_function(*args, **kwargs):
stuff stuff stuff
r = fn(*args, **kwargs)
stuff stuff stuff
return sync_version_of_function
Что мне не хватает, так это как справиться с ...
- Я бы хотел определить TypeVar
A
чтобы представить список аргументов, но я не могу понять, как к этому подойти.