python装饰器保留函数原有信息的@functools.wraps源码解析

本文深入探讨Python中的装饰器,并详细解析`functools.wraps`的作用,阐述如何利用它来保留被装饰函数的元信息,如名称、文档字符串和模块等关键细节。
摘要由CSDN通过智能技术生成
python装饰器保留函数原有信息的@functools.wraps源码解析

# 调用functools库的partial方法
from functools import partial

# 要保留的原函数参数
WRAPPER_ASSIGNMENTS = ('__module__', '__name__', '__qualname__', '__doc__',
                       '__annotations__')
# 更新属性字典
WRAPPER_UPDATES = ('__dict__',)


def update_wrapper(wrapper,
                   wrapped,
                   assigned=WRAPPER_ASSIGNMENTS,
                   updated=WRAPPER_UPDATES):
    '''
    恢复原函数自身属性的装饰器实际处理函数
    :param wrapper:装饰器的闭包函数
    :param wrapped:被装饰的原函数
    :param assigned:需要保留的原函数属性集合
    :param updated:更新闭包函数的属性
    :return:恢复原函数属性的闭包函数
    '''
    print("wrapper is", wrapper.__name__)
    #循环恢复原函数的属性
    for attr in assigned:
        try:
            value = getattr(wrapped, attr) #获取原函数的属性
        except AttributeError:
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值