一、了解下python装饰器
python的一个函数,可以让其他函数在不改动时获得更多的功能。我目前接触到的无非是:插入日志、性能测试等等,使用解释器可以提取“公因式”,不同的功能有不同的“系数”
套用个通用的说法,可以给被装饰的对象(对象或函数)添加额外的功能~~~~
二、语法
咋用装饰器?
使用 @语法糖
@testdeftest_case()print “pass”
例子中,还缺少一个test函数的定义,这里先不写。
如果有传参的需求,python支持可变参数和关键字参数的,这就很灵活,test函数里可以定义好,这样可以灵活使用了。
可以通过装饰器的参数来禁止或者允许是否使用装饰器功能(如定义时加入开关参数)
三、更高阶的用法
基本的懂了,看一些高阶用法
1、python内置的装饰器
有三个,类静态方法,类方法和属性方法
(插播下区别:静态方法:不需创建对象,类直接调用,不会隐式传递self(所以使用时参数个数必须与定义的个数保持一致,否则报错)
类方法:self是类本身,调用方法传的值必须是类的公有属性
属性方法:变为私有属性,比如某个属性值通过一系列动作才返回结果,但过程不需了解,只需调用属性------如果需要修改属性,需要使用@property.setter再次装饰)(几种方法的描述可参考:https://www.cnblogs.com/revo/p/7381101.html)
属性有3个装饰器:setter , getter , deleter 都是在property的基础上做了封装,经过property装饰的函数返回不再是个函数,而是个property对象
四、其他
1、多个装饰器的顺序
多个装饰器同时使用时,装饰器的调用顺序与@语法糖声明的顺序相反,最后执行函数本身;
需要注意内函数和外函数之间的语句不会装饰到目标函数上,并且装饰器返回函数
可参考链接:https://blog.csdn.net/xiangxianghehe/article/details/77170585 (评论的内容完美解释了问题,赞)
五、优缺点
1、优点:优雅,减少重复
2、引入的问题(缺点):
(1)位置错误可能引起异常
(2)错误的函数名和文档
(3)装饰器不可以用在静态方法和类方法上