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

Pylance无法显示包装类调用时的参数及文档字符串问题求助

问题分析与修复方案

问题原因

你的Wrapper类的__call__方法用了*args: Any, **kwargs: Any这种宽泛的参数注解,类型检查器(比如Pylance)没法从这里关联到被包装的Action类构造函数的具体参数签名和文档字符串,所以调用wrapped时无法给出对应的智能提示。

修复方案

要让类型检查器识别被包装对象的参数和文档,需要用PEP 612引入的ParamSpec和泛型参数来保留原始可调用对象的参数信息,同时手动传递文档字符串。具体实现如下:

from typing import Any, TypeVar, Generic, Callable, ParamSpec
# 如果Python版本低于3.10,替换为下面的导入:
# from typing_extensions import ParamSpec

# 定义参数规格泛型,捕获被包装对象的所有参数信息
P = ParamSpec("P")
ReturnType = TypeVar("ReturnType", bound=Any)


class Wrapper(Generic[P, ReturnType]):
    def __init__(self, callable_: Callable[P, ReturnType]) -> None:
        self.callable_ = callable_
        # 传递被包装对象的文档字符串
        self.__doc__ = callable_.__doc__

    def __call__(self, *args: P.args, **kwargs: P.kwargs) -> ReturnType:
        return self.callable_(*args, **kwargs)


class Action:
    def __init__(self, title: str) -> None:
        """创建一个Action实例,必须传入标题参数"""
        self.title = title


wrapped = Wrapper(Action)

# 现在调用wrapped时,Pylance会显示Action.__init__的参数提示和文档字符串
action = wrapped("title")

关键修改说明

  • ParamSpec("P"):定义参数规格变量,用来精准捕获被包装可调用对象的位置参数、关键字参数信息
  • Callable[P, ReturnType]:明确被包装对象的参数符合P的规格,返回类型为ReturnType
  • __call__方法的*args: P.args, **kwargs: P.kwargs:告诉类型检查器,该方法的参数完全匹配被包装对象的参数,编辑器就能给出准确的参数提示
  • self.__doc__ = callable_.__doc__:让编辑器悬停wrapped时,显示原始可调用对象的文档字符串

修改后,Pylance就能在调用wrapped时正确显示Action.__init__的参数要求和文档了。

内容的提问来源于stack exchange,提问作者eightlay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:42:17