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) | 一个包装函数。该函数直接返回被包装的函数。但所返回的被包装函数,其签名会与参数 签名的输入参数部分、拷贝自 |
范例
将函数的签名拷贝到另一函数
- 代码
- 结果
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"))
Runtime type is 'function'
(val1: int, val2: str) -> str
不是float!