类型化的`functools.wraps`。
项目描述
tightwrap
tightwrap(发音为typed wrap)是functools.wraps
的替代品,与静态类型一起工作。tightwrap非常小巧,所以如果您不想添加依赖,只需将此文件作为供应商。
functools.wraps
在包装函数时经常用于适配运行时函数签名,但它与静态类型工具配合不佳。tightwrap.wraps
具有相同的接口,您应该使用它代替
from tightwrap import wraps
def function(a: int) -> int:
return a + 1
@wraps(function)
def wrapping(*args, **kwargs) -> int:
return function(*args, **kwargs)
reveal_type(wrapping) # Revealed type is "def (a: builtins.int) -> builtins.int"
wrapping("a string") # error: Argument 1 to "wrapping" has incompatible type "str"; expected "int"
tightwrap在幕后应用functools.wraps
,因此运行时检查仍然有效。
如果您的包装器返回类型与您包装的函数不同,tightwrap.wraps
将使用包装器的返回类型,并使运行时签名返回类型匹配。
比较而言,当使用functools.wraps
时,当前版本的Mypy报告
from functools import wraps
def function(a: int) -> int:
return a + 1
@wraps(function)
def wrapping(*args, **kwargs) -> int:
return function(*args, **kwargs)
reveal_type(wrapping) # Revealed type is "def (*args: Any, **kwargs: Any) -> builtins.int"
wrapping("a string") # No type error, blows up at runtime.
变更日志
24.3.0 (2024-05-24)
24.2.0 (2024-05-04)
- 添加对Python 3.8和3.9的支持。 (#1)
24.1.0 (2024-01-09)
- 初始版本。
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
tightwrap-24.3.0.tar.gz (22.9 kB 查看哈希值)
构建分布
tightwrap-24.3.0-py3-none-any.whl (7.5 kB 查看哈希值)