使用装饰器添加可检查的类型注释
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
来不及使用它。
是否可以使用装饰器为函数添加类型注释,以便像 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
来不及使用它。