python13 装饰器(函数式编程的另一个应用)

也是面向对象的一种思想的体现(开闭原则 )

  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)

猜你喜欢

转载自www.cnblogs.com/libotao/p/12730592.html