Python 如何为修饰过的函数键入一个返回值来改变函数的返回?
我正在编写一个Python包,它使用decorator删除样板代码,同时内省函数以获得默认的函数名。如下所示:Python 如何为修饰过的函数键入一个返回值来改变函数的返回?,python,python-3.x,pycharm,Python,Python 3.x,Pycharm,我正在编写一个Python包,它使用decorator删除样板代码,同时内省函数以获得默认的函数名。如下所示: def make_real_实例(func:Optional[Callable]=None, *,函数名称:可选[str]=None): def make_包装(在函数中): @functools.wrapps(in_func) def包装(*args,**kwargs): 非局部函数名 #如果提供,请使用func_名称 func_name=func_name或in_func.\uu
def make_real_实例(func:Optional[Callable]=None,
*,函数名称:可选[str]=None):
def make_包装(在函数中):
@functools.wrapps(in_func)
def包装(*args,**kwargs):
非局部函数名
#如果提供,请使用func_名称
func_name=func_name或in_func.\uu name__
#从函数及其输入为新对象构造参数
stuff=in_func(*args,**kwargs)
#一般加工材料
新建对象=对象构造函数(已处理的对象,函数名)
返回新的\u对象
返回包装器
如果func:
返回make_包装(func)
退货包装
现在,我有这样的课:
类对象构造函数:
定义初始化(自…):
#做事
@使你成为现实
def add__foo(自身,foo_长度:浮动):
stuff=…#处理此方法的输入
退货
@make\u real\u instance
装饰程序会调用ObjectConstructor
实例的add\u foo
方法以返回新实例。但是,未修饰方法的实际返回类型是元组
我想做的是将方法注释为ObjectConstructor
的实例,以键入hint返回。即,行:
def add_foo(self,foo_长度:float):
将成为(从\uuuuu future\uuuuuu
导入注释后):
def add_foo(self,foo长度:float):->ObjectConstructor
然而,我的IDE(PyCharm,虽然我不一定认为在本例中是重要的)抱怨(我认为是公平的)该方法的输出与暗示的返回类型不匹配
最后,我的问题是:有没有一种方法可以正确地键入您修改使用装饰器输出的函数调用的返回类型?或者,我唯一的办法是将我的decorator更改为我在每个已修饰的函数中调用的函数,并每次显式传递我的func\u name
参数?我的意思是:
def make_obj_from_stuff(stuff,func_name)->ObjectConstructor:
#一般加工材料
新建对象=新建对象=对象构造函数(已处理的对象,函数名)
返回新的\u对象
类对象构造函数:
定义初始化(自…):
#做事
def add_foo(self,foo_length:float)->ObjectConstructor:
stuff=…#处理输入
new_obj=从_stuff(stuff,“add_foo”)生成_obj_
返回新对象
如果我想维护我创建的decorator接口,我是否只需要接受这样一个事实:如果没有IDE的投诉,我将无法正确键入hint?似乎是相关的。