您不能
Callable说任何其他参数。它们不是通用的。您唯一的选择是说您的装饰器采用,
Callable并且
Callable返回不同的值。
您 可以 使用typevar来确定返回类型:
RT = TypeVar('RT') # return typedef inject_user() -> Callable[[Callable[..., RT]], Callable[..., RT]]: def decorator(func: Callable[..., RT]) -> Callable[..., RT]: def wrapper(*args, **kwargs) -> RT: # ...
即使这样,最终的修饰
foo()函数也具有
def (*Any, **Any) ->builtins.bool*您使用时的键入签名
reveal_type()。
当前正在讨论各种提案以
Callable提高灵活性,但这些提案尚未实现。看到
- 允许可变参数的仿制药
- 建议:泛化
Callable
以便能够指定参数名称和种类 - TypeVar表示Callable的参数
- 出色地支持功能装饰器
对于一些例子。该列表中的最后一个是一张总括票,其中包括您的特定用例,用于更改可调用签名的装饰器:
混乱与返回类型或参数对于任意函数,您根本无法执行此 *** 作-甚至没有语法。这是我组成的一些语法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)