Pull to refresh

Comments 4

А подскажите, плиз, как не сломать типы у метода/функции при использовании декоратора? Допустим, декоратор не меняет сигнатуру.

Если имеются в виду аннотации типов, то с версии 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, но, насколько я понял, есть ограничения

1001 статья про декораторы на Python, ничего нового, опять про одно и то же, остановитесь уже.

Sign up to leave a comment.