You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm中类内装饰器修饰函数静态类型检查无错误提示问题

PyCharm装饰器静态类型检查失效问题

在使用PyCharm进行静态类型检查时,遇到装饰器修饰函数的参数校验问题:当调用被装饰器修饰的函数时传入错误的参数名或类型,IDE不会给出任何警告或错误提示,仅在运行时才会报错。

问题复现步骤

  • 为函数添加装饰器
  • 调用函数时传入错误的参数名或类型

预期结果

PyCharm应高亮显示错误的参数名或类型。

实际结果

错误的参数名未被IDE高亮提示。

环境信息

  • Python版本:3.10
  • PyCharm版本:2023.3.4

代码示例(初始问题)

def myDecorator(func):
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)

    return wrapper

@myDecorator
def myFunc(x: int, y: int):
    print(x+y)

myFunc(z=4, x="something")  # 期望“z=4”和x="something"被高亮

补充说明(类内装饰器问题)

普通函数的上述问题已通过typing.ParamSpec和typing.TypeVar修复,但类内部定义的被装饰器修饰的函数仍存在该问题:

from typing import ParamSpec
from typing import TypeVar
from typing import Callable

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


def myDecorator(func: Callable[P, T]) -> Callable[P, T]:
    def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
        return func(*args, **kwargs)
    return wrapper

class myClass:
    @myDecorator
    def myFunc2(self, x: int, y: int) -> None:
        print(x + y)

    @myDecorator
    def another_function(self):
        self.myFunc2(x=3)  # 显示类型提示:P,并高亮“x=3”为错误参数

内容的提问来源于stack exchange,提问作者tomas-silveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 13:44:56