使用Python装饰器实现修复的方法

  介绍

使用Python装饰器实现修复的方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),

为了不影响,Python的functools包中提供了一个叫包装的装饰来消除这样的副作用。写一个装饰的时候,最好在实现之前加上functools的包装,

它能保留原有函数的名称docstring和。

未加@wraps的时候:

 

但是加上@wraps以后:

 

其中主要的就是两个变量:

1,显示正在执行的函数的名称f.name

2,显示正在执行的函数的注释f.doc

简单来说就是:

如果没使用@wraps,当一个调用了装饰器B的话,即使A.name,返回的会是装饰器B的函数名称,而不是一个的函数名称

如果使用了@wraps,当一个调用了装饰器B的话,A.__ name__返回的会是一个函数的名称,而不是饰器B的名称,

这也即使常说的@wraps是装饰器的修复技术,

实际就是修复还原了一个的__ name__变量,同理__ doc__变量也是一样。

看完上述内容,你们掌握使用Python装饰器实现修复的方法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

使用Python装饰器实现修复的方法