Python面向对象:装饰器

一、装饰器含义

  • python的装饰器本质上是一个Python函数。

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

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

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

  • 概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

二、为什么需要装饰器

  • 一个简单的例子
    请添加图片描述
  • 需求增加
  • 可以记录下函数的执行日志
    请添加图片描述
  • 又有增加需求
  • 有100个函数需要增加这个需求,并且后续可能还要对这一百个函数增加执行前打印日志
    请添加图片描述
  • 运行结果
    请添加图片描述

三、装饰器使用方法

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

四、装饰器使用场景

1. 装饰器入门:日志打印器

  • 日志打印器,它要实现的功能:
  • 在函数执行前,先打印一行日志告知一下,要执行函数了。
  • 在函数执行完,也不能什么反应也没有,再打印一行日志告知下,执行结束了。
    在这里插入图片描述
  • 运算结果
    在这里插入图片描述
  • 代码
def logger(func):
    def wrapper(*args, **kw):
        print("我准备开始计算:{}函数了: ".format(func.__name__))
        # 正在执行的时这行
        func(*args, **kw)
        print("wc,算完了。来根儿鸡腿!!")
    return wrapper
@logger
def add(x, y):
    print("{} + {} = {}".format(x, y, x+y))
add(200, 100)

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

  • 实例:
    在这里插入图片描述

  • 两个函数的执行的时候,分别根据其国际,来说出一段打招呼的话。

  • 实例
    在这里插入图片描述

  • 在给他们俩戴上装饰器的时候,就要跟装饰器说,这个人是哪国人,然后装饰器就会做出判断,打出对应的招呼。戴上帽子后,如上图。

  • 实例
    在这里插入图片描述

  • 万事俱备,只差帽子。来定义一下,这里需要两层嵌套。如上图。

  • 执行一下:

  • 在这里插入图片描述

  • 完整函数
    在这里插入图片描述

3.装饰器高阶:不带参数的类装饰器

  • 基于类装饰器的实现,必须实现__call____init__两个内置函数。
  • __init__:接收被装饰函数
  • __call__:实现装饰逻辑
    在这里插入图片描述
  • 带参数和不带参数的类装饰器有很大的不同。
  • __init__:不再接收被装饰函数,而是接收传入参数
  • __call_:接收被装饰函数,实现装饰逻辑。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值