python装饰器

一、了解下python装饰器

  python的一个函数,可以让其他函数在不改动时获得更多的功能。我目前接触到的无非是:插入日志、性能测试等等,使用解释器可以提取“公因式”,不同的功能有不同的“系数”

  套用个通用的说法,可以给被装饰的对象(对象或函数)添加额外的功能~~~~

二、语法

  咋用装饰器?

  使用 @语法糖

@test

def test_case()

  printpass

  例子中,还缺少一个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)装饰器不可以用在静态方法和类方法上

 

posted on 2018-11-12 16:36  testzhangcs  阅读(137)  评论(0编辑  收藏  举报

导航