Как заставить декоратор функции сохранять подпись

Можно ли заставить декораторы сохранять сигнатуры функций для средств проверки типов, таких как pylance?

def should_preserve_signature():
    R = TypeVar("R")

    def my_decorator(func: Callable[..., R]) -> Callable[..., R]:
        # @wraps(func) -- no luck :(
        # @wrapt.decorator -- no luck :(
        def wrapper(*args: Any, **kwargs: Any) -> R:
            return func(*args, **kwargs)

        update_wrapper(wrapper, func)
        return wrapper

    @my_decorator
    def my_func(s: str):
        pass

    my_func() # --> ISSUE: recognized by pylance as "(function) def my_func(...) -> None"

Ефим
Вопрос задан6 мая 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.