Python 改变函数参数的类型提示修饰符

Python 改变函数参数的类型提示修饰符,python,python-3.x,type-hinting,mypy,pyright,Python,Python 3.x,Type Hinting,Mypy,Pyright,我正在创建一个装饰器,我希望保留typehint。但是,我需要稍微修改一下返回类型。如果您的修饰函数签名与原始签名相同,则包含有关如何执行此操作的信息,但如果更改了返回类型,则我不确定如何执行此操作 例如,我的原始函数如下: async def simple_func(a:int)->int: “测试调用机制的简单休眠函数” 返回a+1 它有签名(int)->等待[int] 以下是我如何使用它: t\u wrap=make\u sync(简单函数) _=获取事件循环() 断言t_wrap(4)

我正在创建一个装饰器,我希望保留
typehint
。但是,我需要稍微修改一下返回类型。如果您的修饰函数签名与原始签名相同,则包含有关如何执行此操作的信息,但如果更改了返回类型,则我不确定如何执行此操作

例如,我的原始函数如下:

async def simple_func(a:int)->int:
“测试调用机制的简单休眠函数”
返回a+1
它有签名
(int)->等待[int]

以下是我如何使用它:

t\u wrap=make\u sync(简单函数)
_=获取事件循环()
断言t_wrap(4)=5
当我在编辑器中使用pyright或类似工具查看
t\u wrap
的类型时,它是
(*args,**kwargs)->int
,而不是
(int)->int

我的装饰器功能如下:

从functools导入包装
通过键入import Callable,TypeVar
R=TypeVar('R')
def make_sync(fn:Callable[…,waitiable[R]])->Callable[…,R]:
@包装(fn)
def同步功能的版本(*args,**kwargs):
东西
r=fn(*args,**kwargs)
东西
返回函数的同步版本

我缺少的是如何处理
-我想定义一个
TypeVar
a
来表示参数列表,但我不知道如何处理它。

上次我检查mypy时,至少不支持这个。谢谢!这是因为mypi没有实现它,还是因为TypeHitts不够表达?类型提示就是提示——最后,Python不是强类型语言,信息根本无法保存。您的函数的
sync\u version\u
有一个明确定义的签名,这就是您得到的签名,因为您可以将任何类型的函数传递给decorator。@Grismar python是一种强类型语言,它是动态类型的,而不是静态类型的。有提供静态类型检查的第三方库。@juanpa.arrivillaga-感谢您的澄清,您完全正确,我想说“不是静态类型”。如果OP对它的意思感到好奇,那么这有一个很好的答案: