我正在尝试使用 Python 3.12 中的新类型提示,突然 PyCharm 突出显示了有关
ParamSpec
新用法的一些模糊问题。
import functools
from dataclasses import dataclass
from typing import Callable
from typing import Concatenate
@dataclass
class Message:
text: str
type CheckFunc[**P] = Callable[Concatenate[Message, P], None]
def check_is_command_not_answer[**P](func: CheckFunc[P]) -> CheckFunc[P]:
@functools.wraps(func)
def inner(message: Message, *args: P.args, **kwargs: P.kwargs) -> None:
if message.text:
...
else:
return func(message, *args, **kwargs)
return inner
关于
return inner
PyCharm 的指责:
预期类型 '(Message, ParamSpec("P")) -> None',却得到 '(message: Message, ParamSpec("P"), ParamSpec("P")) -> None'
这是截图。
顺便说一句,我到处使用这个装饰器,并且代码运行得很好。 Pyright 也不抱怨这里的任何问题。
我无法发现问题所在。可以吗?
你的代码没有问题。问题出在 PyCharm 上。
它对
Concatenate
等人的支持。不完整,如PY-51766中所述。然而,我无法为这个错误找到一个好的现有问题。
在那里发表
type: ignore
或 noqa
评论并继续。