Как ввести подсказку декоратора, чтобы указать тип возврата декорированной функции, сохраняя при этом видимость доктора Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как ввести подсказку декоратора, чтобы указать тип возврата декорированной функции, сохраняя при этом видимость доктора

Сообщение Anonymous »

Как я могу привлечь аргумент в декоратор, чтобы ограничить тип возврата функции, оформленную, при поддержании подсказки типа Docstring и Argery в моем IDE при вызове украшенной функции? />

Код: Выделить всё

from functools import wraps

def with_log(fun):  # no type hint on `fun`
@wraps(fun)
def _decorated():
print(f"Calling {fun}")
return fun()

return _decorated

class Dog:
@with_log
def bark(self, times: int):
"""Prints woof several times"""
print(" ".join(["woof"] * times))
return True

dog = Dog()
dog.bark(3)
Но я хотел бы ограничить return type fantaine. Callable [..., bool] ) и почти работает:

Код: Выделить всё

from collections.abc import Callable
from functools import wraps
from typing import ParamSpec

P = ParamSpec("P")

def with_log(fun: Callable[P, bool]):
@wraps(fun)
def _decorated(*args: P.args, **kwargs: P.kwargs):
print(f"Calling {fun}")
return fun(*args, **kwargs)

return _decorated

class Dog:
@with_log  # "Literal[1]" is not assignable to "bool" ✅
def bark(self, times: int):
"""Prints woof several times"""
print(" ".join(["woof"] * times))
return 1

dog = Dog()
dog.bark(3)
Но теперь мой ide не показывает DocString для Bark :


Подробнее здесь: https://stackoverflow.com/questions/796 ... ated-funct
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»