我正在创建一个装饰器,我希望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
我缺少的是如何处理...
- 我想定义 aTypeVar
A
来表示参数列表,但我不知道如何处理。