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
装饰器内可以使用传入的参数