wraps装饰器的作用
2024-09-08 07:29:23
装饰器的本质是一个闭包函数,作用在于不改变原函数功能和调用方法的基础上给它添加额外的功能.装饰器在装饰一个函数时,原函数就成了一个新的函数,也就是说其属性会发生变化,所以为了不改变原函数的属性,我们会调用functools中的wraps装饰器来保证原函数的属性不变.下边以一个简单的例子展示wraps装饰器的作用 :
在有wraps的情况下:
from functools import wraps def test(func):
@wraps(func)
def inner():
'装饰器'
print(inner.__name__,inner.__doc__)
return func()
return inner @test
def func():
'原函数'
print(11111)
print(func.__name__,func.__doc__) func()
# func 原函数
# 11111
# func 原函数
很明显在使用了wraps的情况下当调用func函数时,func的属性并没有说明变化.
在没有wraps装饰的情况下:
from functools import wraps def test(func):
# @wraps(func)
def inner():
'装饰器'
print(inner.__name__,inner.__doc__)
return func()
return inner @test
def func():
'原函数'
print(11111)
print(func.__name__,func.__doc__) func()
# inner 装饰器
# 11111
# inner 装饰器
虽然func函数本身的功能没有发生变化,但是__name__已经发生变化,其属性也变成inner函数的属性.
综上,在进行装饰器的操作时,最好加上wraps装饰器,保证原函数在执行时不会发生异常.
最新文章
- 【转载】PHP PSR-1 基本代码规范(中文版)
- Sprint第三阶段(第三天12.11)
- Java数据库连接池封装与用法
- mac下忘记mysql密码, 重新设置mysql密码
- linux+jre+apache+mysql+tomcat调优
- Javascript基础系列之(六)循环语句(do while循环)
- Json转换为对象
- Form认证导致登陆页面的样式无效和图片不能显示的原因
- 【设计模式 - 10】之外观模式(Facade)
- MacBook Pro 下Bash Shell 利用Alias 简化命令
- SpringMVC 学习-入门篇
- android 中判断WiFi是否可用的可靠方法 ,android 是否联网
- bootstrap4中文版(纯手工翻译)
- php连接memcahed出现Cannot assign requested address (99)的解决方法
- 准备在CSDN知识库建立一个Ext JS的知识库
- Kubernetes移除node节点
- C#正则表达式_简单梳理_Emoji表情字符处理
- 【java基础】基础小总结
- Ionic构建打包apk出现的问题集合
- PHP ini_set