装饰器分为类装饰器和方法装饰器,是用来拓展原有函数或类功能的装饰函数
原理是将原有函数或类型作为参数传入装饰器,装饰器中会在原有函数前后加上其他功能,此过程类似进行装饰,并利用闭包将新函数返回,等待主函数调用。
装饰器的作用是可以不改变原有函数代码和调用方式的情况下,对函数功能进行拓展
装饰器代码示例如下:
'''
使用装饰器构造登录检测功能
vip等级判断功能
打印支付结果功能
date:2022/4/4
'''
def login(func):
def inner(*args,**kwargs):
if accont['is_authenticated'] == False:
username = input("user:")
password = input("password:")
if username == accont['username'] and password == accont['password']:
print("---welcome login----")
accont['is_authenticated'] = True
func(*args,**kwargs)
else:
print("wrong username or password!")
else:
print("用户已登录,验证通过")
func(*args,**kwargs)
return inner
def pay_money(func):
def inner(*args,**kwargs):
func(*args,**kwargs)
print("已充值")
return inner
def home():
print("---首页----")
@login
def america():
print("---欧美专区----")
@login
def japan():
print("---日韩专区----")
@login
@pay_money
def henan(vip_level):
print("---河南专区----")
if vip_level > 3:
print("解锁本专区高级玩法")
if __name__ == '__main__':
accont = {
"is_authenticated": False, # 用户登录了就改成True
"username": "mimi", # 假装这是用户存的信息
"password": "123" # 假装这是用户存的信息
}
home()
america()
japan()
henan(4)
1个函数可以有多个装饰器,装饰器效果由上至下