介绍
使用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装饰器实现修复的方法