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

VS Code/PyCharm中如何让装饰器包装器的文档串显示在悬停提示中?

让VS Code/PyCharm悬停显示装饰器包装器的文档串

针对VS Code(PyLance)的解决方法

方法1:移除functools.wraps并手动配置元信息

若你的装饰器原本使用@functools.wraps(func)同步原函数元信息,直接移除该装饰器,手动设置包装器的名称、限定名,并赋值合并后的文档串。PyLance会因包装器无__wrapped__属性,直接读取包装器的__doc__:

def magic(func):
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    
    # 保持函数名与原函数一致
    wrapper.__name__ = func.__name__
    wrapper.__qualname__ = func.__qualname__
    # 合并原函数文档与装饰器额外内容
    wrapper.__doc__ = (func.__doc__ or "") + "\n\n额外说明:这是装饰器添加的文档内容"
    
    return wrapper

@magic
def sayHello():
    """原函数文档:打招呼函数"""
    print("Hello!")

方法2:用functools.update_wrapper排除__wrapped__

若需保留原函数的模块名、注解等元信息,但不想让PyLance追踪原函数文档,可使用update_wrapper并指定不设置__wrapped__属性:

import functools

def magic(func):
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    
    # 复制指定元信息,不创建__wrapped__属性
    functools.update_wrapper(
        wrapper, 
        func, 
        assigned=('__module__', '__name__', '__qualname__', '__annotations__'),
        wrapped=()
    )
    # 设置合并后的文档串
    wrapper.__doc__ = (func.__doc__ or "") + "\n\n额外说明:装饰器添加的内容"
    
    return wrapper

方法3:临时关闭PyLance类型检查(不推荐)

打开VS Code设置,搜索Python > Analysis: Type Checking Mode,改为off。此方法会关闭PyLance的类型检查功能,仅作临时应急方案。

针对PyCharm的解决方法

PyCharm的文档提示逻辑与PyLance一致,上述两种代码修改方法完全适用。此外,还有一个专属小技巧:

方法:给包装器添加@staticmethod(场景受限)

若装饰的是普通函数,可在包装器上添加@staticmethod(不影响函数功能),让PyCharm优先读取包装器的文档串:

def magic(func):
    @staticmethod
    def wrapper(*args, **kwargs):
        return func(*args, **kwargs)
    
    wrapper.__name__ = func.__name__
    wrapper.__doc__ = (func.__doc__ or "") + "\n\n额外说明:PyCharm专属适配"
    
    return wrapper

注意:此方法不适用于实例方法,会导致调用错误。

同时确保PyCharm文档提示开启:依次打开File > Settings > Editor > General > Code Completion,勾选Show the documentation popup in,并设置合适的弹出延迟。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:57:38