Comments 4
А подскажите, плиз, как не сломать типы у метода/функции при использовании декоратора? Допустим, декоратор не меняет сигнатуру.
0
Если имеются в виду аннотации типов, то с версии 3.10 как-то так:
from functools import wraps
from typing import Callable, ParamSpec, TypeVar
P = ParamSpec("P")
T = TypeVar("T")
def decorator(func: Callable[P, T]) -> Callable[P, T]:
@wraps(func)
def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
return func(*args, **kwargs)
return wrapper
@decorator
def greet(name: str) -> str:
return f"Hello {name}!"
Менять сигнатуру тоже можно с помощью Concatenate, но, насколько я понял, есть ограничения
+1
1001 статья про декораторы на Python, ничего нового, опять про одно и то же, остановитесь уже.
+2
а вот так надо писать про декораторы, не повторяя "тысячу предыдущих" https://habr.com/ru/articles/750312/
+1
Sign up to leave a comment.
Декораторы Python: пошаговое руководство