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

Python中如何获取被装饰器修饰的函数的__doc__说明文档?

解决方案

你遇到的问题本质是装饰器将原函数替换为包装函数后,包装函数默认没有继承原函数的元信息(包括文档字符串__doc__),可以通过以下两种主流方案解决:

方案1:使用标准库functools.wraps(最推荐)

这是Python官方提供的标准方案,会自动将原函数的文档字符串、函数名、参数签名等所有元信息拷贝到包装函数上,修改后的装饰器示例如下:

import functools

def decor_func(func):
    # 用wraps装饰包装函数,传入原函数func作为参数
    @functools.wraps(func)
    def wrap(*args, **kwargs):
        return func(*args, **kwargs)
    return wrap

@decor_func
def foo(*args, **kwargs):
    """
    Foo documentation is here!
    """
    return None

print(foo.__doc__)
# 输出:
# Foo documentation is here!

除了__doc__,该方案还会同步保留原函数的__name__、__module__、参数签名等信息,兼容性最好。

方案2:手动拷贝原函数元信息

如果不想引入额外依赖,也可以手动将需要的元信息赋值给包装函数,适合简单场景:

def decor_func(func):
    def wrap(*args, **kwargs):
        return func(*args, **kwargs)
    # 手动拷贝文档字符串与函数名
    wrap.__doc__ = func.__doc__
    wrap.__name__ = func.__name__
    return wrap

该方案的缺点是需要手动指定所有需要保留的元信息,容易遗漏。

补充:无需修改装饰器的临时取数方案

如果装饰器是第三方提供无法修改,大部分规范实现的装饰器会在包装函数上保留__wrapped__属性指向原函数,你可以直接通过该属性访问原函数的文档:

# 仅当装饰器实现了__wrapped__属性时可用
print(foo.__wrapped__.__doc__)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:54:02