Как я могу создать декораторы, которые обертывают функцию с подписью из inspect.Signature сам объект вместо функции.
Рассмотрим следующее:
>>> import functools
>>> import inspect
>>>
>>> def foo(a, b: int, c=0, d:float=1.0) -> float:
... return a + (c * b) ** d
>>> @functools.wraps(foo)
... def bar(*args, **kwargs):
... return sum(kwargs.values())
>>> print(inspect.signature(foo))
(a, b: int, c=0, d: float = 1.0) -> float
>>> print(inspect.signature(bar))
(a, b: int, c=0, d: float = 1.0) -> float
Я быхотел бы иметь функцию wrap_with_signature
, чьим входом является объект inspect.Signature и возвращает декоратор такой, что:
foo_signature = inspect.signature(foo)
@wrap_with_signature(foo_signature) # parametrize with signature instead of function
def bar(*args, **kwargs):
return sum(kwargs.values())
Почему?Потому что это позволило бы мне отредактировать объект Signature, чтобы получить именно ту подпись, которую я хочу.