也是面向对象的一种思想的体现(开闭原则 )
1 """ 2 装饰器 3 """ 4 # 需求:对以下两个功能增加权限验证. 5 6 #------------------------------第一版--------------------------- 7 """ 8 # 需要增加的功能 9 def verify_permissions(): 10 print("权限验证") 11 12 # 已有功能 13 def enter_background(): 14 verify_permissions() 15 print("进入后台") 16 17 def delete_order(): 18 verify_permissions() 19 print("删除订单") 20 21 enter_background() 22 delete_order() 23 24 # 缺点:增加新功能,需要修改已有功能. [违反开闭原则] 25 """ 26 27 28 #------------------------------第二版------------------------------------------- 29 """ 30 # 需要增加的功能 31 def verify_permissions(func): 32 def wrapper(): 33 print("权限验证") 34 func() 35 36 return wrapper 37 38 # 已有功能 39 def enter_background(): 40 print("进入后台") 41 42 def delete_order(): 43 print("删除订单") 44 45 # enter_background = 新功能 + 旧功能 46 enter_background = verify_permissions(enter_background) 47 delete_order = verify_permissions(delete_order) 48 49 enter_background() 50 delete_order() 51 缺点:每次拦截对已有功能(enter_background)的调用,不科学. 52 """ 53 54 55 #---------------------------第三版-------------------------------------------- 56 """ 57 # 需要增加的功能 58 def verify_permissions(func): 59 def wrapper(): 60 print("权限验证") 61 func() 62 63 return wrapper 64 65 # 已有功能 66 # enter_background = verify_permissions(enter_background) 67 @verify_permissions 68 def enter_background(): 69 print("进入后台") 70 71 @verify_permissions 72 def delete_order(): 73 print("删除订单") 74 75 enter_background() 76 delete_order() 77 缺点:如果已有功能参数不统一,则无法包装. 78 """ 79 80 #----------------------第四版(最终版)-------------------------------------------- 81 def verify_permissions(func): 82 def wrapper(*args, **kwargs): 83 print("权限验证") 84 func(*args, **kwargs) 85 86 return wrapper 87 88 89 # 已有功能 90 @verify_permissions 91 def enter_background(login_id, pwd): 92 print(login_id, pwd, "进入后台") 93 94 @verify_permissions 95 def delete_order(id): 96 print("删除订单", id) 97 98 # enter_background = verify_permissions(enter_background) 99 # delete_order = verify_permissions(delete_order) 100 101 enter_background("abc", 1234) 102 delete_order(101)