跳到主要内容

clone_function

函数私有装饰器源码

decorator: Callable[
[Callable[P, T]],
Callable[P, T]
] = clone_function[**P, T](
func_o: Callable[P, Any],
)

@clone_function(func_o)
def func(val1, val2, ...): ...

装饰器,透过克隆另一个函数的签名,来修改某函数的静态注解。

该装饰器应当用于克隆某个普通的函数。它不适用于方法。

备注

须知,该装饰器不会修改被装饰函数签名中的返回值。

备注

须知,该装饰器不会修改被装饰函数在运行时的行为。

参数

输入

参数类型必选
说明
func_o(**P) -> Any

用来提供被克隆的签名的原函数。

输出

参数类型
说明
decorator((**P) -> T) -> ((**P) -> T)

一个包装函数。该函数直接返回被包装的函数。但所返回的被包装函数,其签名会与参数func_o一致。

签名的输入参数部分、拷贝自func_o,而输出值仍然由被包装的函数决定。

范例

将函数的签名拷贝到另一函数

clone_signature_to_function.py
from typing import reveal_type
import inspect
import flask_sqlalchemy_compat as fsc


def test_func(val1: int, val2: str) -> float: ...


@fsc.utilities.clone_function(test_func)
def modified_func(*args, **kwargs) -> str:
return "不是float!"


if __name__ == "__main__":
reveal_type(modified_func)
print(inspect.signature(modified_func))
print(modified_func(1, "2"))