使用装饰器添加可检查的类型注释

Adding checkable type annotations with decorators

是否可以使用装饰器为函数添加类型注释,以便像 mypy 这样的静态类型检查器可以检测到违规?

作为一个简单的尝试:

@returns(None)
def foo():
    return 3

应该等同于:

def foo() -> None:
    return 3

然而,当 returns 定义为

时,mypy 无法检测到类型冲突
def returns(type):
    def inner(func):
        func.__annotations__['return'] = type
        return func
    return inner

您不能使用装饰器。 mypy 进行 static 类型检查,这意味着所有类型都必须在 编译时 可用。装饰器在 运行 时间 添加注解,mypy 来不及使用它。