Ошибка MyPy «Неподдерживаемый тип декорированного конструктора» при украшении __init__() декоратором классаPython

Программы на Python
Ответить
Anonymous
 Ошибка MyPy «Неподдерживаемый тип декорированного конструктора» при украшении __init__() декоратором класса

Сообщение Anonymous »

Я хочу определить декоратор как класс для украшения методов другого класса.
Однако, когда конструктор __init__() декорируется этим классом, mypy сообщает об ошибке «Неподдерживаемый тип декорированного конструктора» .
Есть ли в моем коде ошибка? Или это ошибка в mypy?
from types import MethodType
from typing import TypeVar, Callable, Type, ParamSpec, Generic

T = TypeVar("T")
P = ParamSpec("P")
R = TypeVar("R")

class method_decorator(Generic[P, R]):
def __init__(self, method: Callable[P, R]):
self.method = method

def __get__(self, instance: T, cls: Type[T]) -> Callable[..., R]:
return MethodType(self, instance)

def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R:
return self.method(*args, **kwargs)

class Foo:
@method_decorator # error: Unsupported decorated constructor type [misc]
def __init__(self, x: int):
self.x = x

@method_decorator
def mul(self, a: int) -> int:
return self.x * a

def gen_foo(x: int) -> Foo:
return Foo(x) # error: Returning Any from function declared to return "Foo" [no-any-return]

foo = gen_foo(2)
print(foo.mul(3))

Результат проверки типа (с MyPy v1.13.0):
$ mypy --strict test.py
test.py:19: error: Unsupported decorated constructor type [misc]
test.py:28: error: Returning Any from function declared to return "Foo" [no-any-return]
Found 2 errors in 1 file (checked 1 source file)


Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-init-w
Ответить

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

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

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

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

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