跳转到主要内容

类型化的`functools.wraps`。

项目描述

tightwrap

PyPI Build Coverage Supported Python Versions Ruff

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)

  • 修复未注释函数的包装。 (#2 #3)

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 查看哈希值)

上传时间 Python 3

由以下支持