-------------------------(装饰器)
一、装饰器功能:
1.引入日志
2.函数执行时间统计
3.权限验证…
二、装饰器分类:
函数装饰器:不带参装饰器,带参装饰器(三层)
类装饰器:不带参,带参
三、函数装饰器代码演练
(一)-----------------函数装饰器不带参数-------------------------
def decorate(func): # 此时func指向login指向的空间
def wrapper():
user_name = input("输入用户名:")
user_password = input("输入用户密码:")
if user_name and user_password:
print("信息校验成功")
func()
return wrapper # 此时login指向wrapper指向的空间
@decorate =============》login = decorate(login)
def login():
print("登录成功喽!!!!!!!!!!!!!!")
login() # 此时调用其实指向的是wrapper(),func指向的是原来login的存储空间
(二)----------------函数装饰器带参数-----------------------
def decorate(*args): # 这里接受装饰器参数
print(*args)
def decorate_1(func): # 这里接受函数名,func指向login,d 指向decorate_1
def wrapper(): # login指向wrapper
user_name = input("输入用户名:")
user_password = input("输入用户密码:")
if user_name and user_password:
print("信息校验成功")
func()
return wrapper # 让login指向wrapper
return decorate_1 # 让d指向decorate_1,
@decorate('欢迎使用带参数的函数装饰器') ======== # d = decorate('装饰器参数') login = d(login)
def login():
print("登录成功喽!!!!!!!!!!!!!!")
login() # login这时指向的是wrapper
(三)、----------------------------------------多层装饰器-------------------------------------------
等等吧!
(四)、类装饰器代码演练
(一)、----------------------------------类装饰器不带参数----------------------------
class decorate():
def __init__(self,func):
self.func = func
print("这里是初始化函数哦")
def __call__(self, *args, **kwargs):
print("这里是类装饰器内部哦。。。。。。。。。。。")
self.func()
@decorate
def show():
print("这是show函数内部呀。。。。。。装饰器完成了")
(二)、----------------------------------类装饰器带参数内部类-------------------------------
class decorate:
def __init__(self,str):
self.str = str
print("这里是:{}".format(self.str))
def __call__(self, *args, **kwargs):
print("这里是类装饰器内部哦。。。。。。。。。。。")
class decorate_1:
def __init__(self, func):
self.func = func
print("这里是内部类初始化函数哦--------")
def __call__(self, *args, **kwargs):
print("好帅哦!!!!!")
self.func(*args, **kwargs)
return decorate_1(*args) # 注意此处必须返回带参的
@decorate('这里就是参数啦')
def show():
print("这是类装饰器装饰器完成了")
show()
(三)、-----------------------------------类装饰器带参数内部函数------------------------------------
class decorate:
def __init__(self,str):
self.str = str
print("这里是:{}".format(self.str))
def __call__(self, *args, **kwargs):
print("这里是类装饰器内部哦。。。。。。。。。。。")
def wrapper():
print("内部函数开始装饰了啦啦啦啦啦啦啦啦")
args[0]()
return wrapper
@decorate('这里就是参数啦')
def show():
print("show函数内部-------------装饰器完成了")