Почему Pyright сообщает о несовместимого метода переопределяется при использовании декоратора с несколькими параметрами?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему Pyright сообщает о несовместимого метода переопределяется при использовании декоратора с несколькими параметрами?

Сообщение Anonymous »

Я испытываю ошибку проверки типа с питанием при использовании декоратора с помощью метода, который переопределяет другой метод. Ошибка возникает, когда метод имеет два параметра (я и другой параметр), но исчезает, когда есть только один параметр (self) < /p>
здесь мой код: < /p>
# With Error
from functools import wraps
from typing import Callable, Concatenate, ParamSpec, TypeVar

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

def use_channel(
func: Callable[Concatenate[T, str, P], R]
) -> Callable[Concatenate[T, str, P], R]:
@wraps(func)
def wrapper(self: T, channel: str, *args: P.args, **kwargs: P.kwargs) -> R:
print(f"[Decorator] self={self}, channel={channel}")
return func(self, channel, *args, **kwargs)
return wrapper

class A:
def set_channel(self, channel: str):
pass

class B(A):
@use_channel
# It result in Pyright Error
def set_channel(self, channel: str):
pass
< /code>
# No Error
from functools import wraps
from typing import Callable, Concatenate, ParamSpec, TypeVar

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

def use_channel(
func: Callable[Concatenate[T, P], R]
) -> Callable[Concatenate[T, P], R]:
@wraps(func)
def wrapper(self: T, *args: P.args, **kwargs: P.kwargs) -> R:
print(f"[Decorator] self={self}")
return func(self, *args, **kwargs)
return wrapper

class A:
def set_channel(self, channel: str):
pass

class B(A):
@use_channel
# No Error
def set_channel(self, channel: str):
pass
< /code>
Сообщение об ошибке: < /p>

Метод "set_channel" переопределения класса "a" в несовместимой манере < /p>
Параметр 2 Mismatch: базовый параметр "канал"-это ключевой параметр, параметр переопределения-это позиционирование. Зачем здесь есть один или два параметра имеют значение здесь? Это связано с тем, как пирайт проверяет совместимость между методами? »


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

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

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

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

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

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

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