> 文档中心 > Python高级:装饰器详解

Python高级:装饰器详解

文章目录

  • 知识目标
    • ①装饰器含义
    • ②为什么需要装饰器
    • ③装饰器使用方法
    • ④装饰器使用场景

知识目标

1、理解装饰器的含义;
2、掌握装饰器的使用方法;
3、掌握装饰器的使用场景。

①装饰器含义

Python的装饰器本质上是一个Python函数
他可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

简单的说装饰器就是一个用来返回函数的函数

它经常用于一些场景,比如:插入日志、性能测试、事物处理、缓存、权限校验等场景。装饰器是解决这些问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
概括的讲:装饰器的作用就是为了已经存在的对象添加额外功能

②为什么需要装饰器

def foo():    print('I am foo')def use_logging(func):    print('%s is running' % func.__name__)    return func@use_loggingdef bar():    print('I am Bar')bar()

Python高级:装饰器详解

③装饰器使用方法

通过上面的例子,我们可以看出装饰器的使用方法

1.先定义一个装饰函数(帽子)(也可以用类实现)
2.在定义业务函数、或者类(人)
3.最后再把这顶帽子戴在这个人头上

④装饰器使用场景

装饰器入门:日志打印器

日志打印器,实现功能:在函数执行前,先打印一行日志告知一下,要执行函数了。
在函数执行完,也不能什么反应都没有,要再打印一行告知执行结束

def logger(func):    def wrapper(*args, **kw): print('我准备开始计算:{}函数了'.format(func.__name__)) # 真正执行的是这行 func(*args, **kw) print('啊哈,我计算完了,给自己加个鸡腿~~')    return wrapper@loggerdef add(x, y):    print('{}+{}={}'.format(x, y, x + y))

装饰器进阶:带参数的函数装饰器

@say_hello("amier")def american():print("I am Argonaut")@say_hello("China")def chinese():print("我来自中国")

装饰器高阶:不带类的类装饰器

class logger(object):def__init__(self,func):self.func=funcdef __call__(self,*args,**kwargs)基于类装饰器实现,必须被两个init 与 claa实现逻辑编辑