十一,装饰器详解

Posted on 2018-08-27 21:06  Schwifety  阅读(103)  评论(0编辑  收藏  举报

1. 什么是装饰器
器:指的是具备某一功能的工具
装饰:指的是为被装饰器对象添加新功能

装饰器就是用来为被装饰器对象添加新功能的工具
注意:装饰器本身可以是任意可调用对象,被装饰器的对象也可以是任意可调用对象


2. 为何要用装饰器
开放封闭原则:封闭指的是对修改封闭,对扩展开放

装饰器的实现必须遵循两大原则:
1. 不修改被装饰对象的源代码
2. 不修改被装饰器对象的调用方式

装饰器的目标:就是在遵循1和2原则的前提下为被装饰对象添加上新功能

3. 怎么用装饰器

装饰器模板:

def outter(func): # func=最原始那个函数的内存地址
  def wrapper(*args,**kwargs):
    code.....
    return func(*args,**kwargs) #最原始的那个index的内存地址()
    code....
  return wrapper

语法糖:

@outter

def index():
  print('welcome to index page')

叠加多个装饰器:

  解释@语法的时候是自下而上运行
  而执行装饰器内的那个wrapper函数时的是自上而下

有参装饰器:

 在装饰器外再套一层有形参的装饰器

 def auth(x,y,z):

  def outter(func): # func=最原始那个函数的内存地址
    def wrapper(*args,**kwargs):
      code.....
      return func(*args,**kwargs) #最原始的那个index的内存地址()
      code....
  return wrapper

 return outter

装饰器内可以使用传入的参数