Mypy 1.10 сообщает об ошибке, когда functools.wraps() используется для общей функцииPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Mypy 1.10 сообщает об ошибке, когда functools.wraps() используется для общей функции

Сообщение Anonymous »

TLDR;

У меня есть декоратор, который:
  • меняет сигнатуру функции
  • обернутая функция использует некоторые аргументы общего типа
  • Кроме подписи я хотел бы использовать funtools.wraps, чтобы сохранить остальную информацию.обернутая функция использует некоторые аргументы общего типа.
    Кроме подписи я хотел бы использовать funtools.wraps, чтобы сохранить остальную информацию. li>
Есть ли способ добиться этого без жалоб mypy?

Дополнительный контекст
Минимальный рабочий пример будет выглядеть так:

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

from functools import wraps
from typing import Callable, TypeVar

B = TypeVar('B', bound=str)

def str_as_int_wrapper(func: Callable[[int], int]) -> Callable[[B], B]:
WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__qualname__', '__doc__',)
WRAPPER_UPDATES = ('__dict__', '__annotations__')

@wraps(func, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
def _wrapped_func(val: B) -> B:
num = int(val)
result = func(num)
return val.__class__(result)

return _wrapped_func

@str_as_int_wrapper
def add_one(val: int) -> int:
return val + 1
Кажется, это работает нормально, но mypy (версия 1.10.0) это не нравится. Вместо этого он жалуется

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

test.py:17: error: Incompatible return value type (got "_Wrapped[[int], int, [Never], Never]", expected "Callable[[B], B]")  [return-value]
test.py:17: note: "_Wrapped[[int], int, [Never], Never].__call__" has type "Callable[[Arg(Never, 'val')], Never]"
Если я удалю декоратор @wraps или заменю аннотации типа B на str, ошибка исчезнет.
Вопрос
Я что-то упустил? Это какая-то ошибка или ограничение, о которых уже сообщалось в mypy (ничего не удалось найти)? Следует ли об этом сообщать?
Спасибо!

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как заставить mypy правильно проверять тип функции с помощью functools.partial?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Mypy сообщает об ошибке в функции с общим типом
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Mypy сообщает об ошибке в функции с общим типом
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Mypy сообщает об ошибке в функции с общим типом
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Mypy сообщает об ошибке в функции с общим типом
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

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