微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用泛型更改输出的 MyPy 装饰器

如何解决使用泛型更改输出的 MyPy 装饰器

我正在尝试在 python 中编写一个装饰器,它允许任何输入,但更改 MyPy 强制执行的输出。这是我得到的最接近的:

Output = TypeVar('Output',bound=pydantic.BaseModel)

class Spec(Generic[Output]):
    # implementation

def my_decorator(f: Callable[...,Spec[Output]]) -> Callable[...,Output]:
    # implementation

这让我们定义一个方法

@my_decorator
def my_method(arg1: str,arg2: int) -> Spec[SomeType]:
    # Implementation

MyPy 然后让我调用这个方法,它期望 SomeType 作为输出而不是 Spec[SomeType]。太棒了!我缺少的部分是如何让它仍然期望相同的输入参数(最好是任何参数,包括无参数)。

我也知道,如果我保持输出相同,我可以为函数定义一个 TypeVar 像这样保持输入常量:

FuncT = TypeVar('FuncT',bound=Callable[...,Any])
def other_decorator(f: FuncT) -> FuncT:
    # implementation

如何让 MyPy 强制装饰器方法返回一个函数,该函数采用相同的输入但不同的通用输出

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。