菜鳥學Python第十一天
阿新 • • 發佈:2018-11-30
-
什麼是裝飾器
裝飾器指的是為被裝飾物件新增新功能的工具
裝飾器本身可以是任意可呼叫物件
被裝飾物件本身也可以是任意可呼叫物件
-
為什麼要用裝飾器
開放封閉原則:對修改封閉,對擴充套件開放
裝飾器的實現原則:
-
不能修改被裝飾物件的原始碼
-
不能修改被裝飾物件的呼叫方式
裝飾器的目的:
就是在遵循原則1和原則2的原則的條件的情況下實現為被裝飾物件新增新功能。
-
-
怎麼用裝飾器
# 裝飾器的基本框架 def outer(func): def wrapper(*args, **kwargs): # 設定可變形參可以接收任意值
語法糖:在被裝飾物件正上方加入@裝飾器名稱
-
裝飾器使用例項
-
例項1
-
# 實現在被裝飾物件基礎上新增計時功能 import time def timer(func): def wrapper(*args, **kwargs): t1 = time.time() # 記錄被裝飾物件執行前時間 res = func(*args, **kwargs) t2 = time.time() # 被裝飾物件執行完時間 print(t2 - t1) return res return wrapper @timer def welcome(): time.sleep(2) print('welcome to China') welcome()
-
例項2
# 給被裝飾物件新增登入認證功能 def login(func): def wrapper(*args, **kwargs): while True: name = input("input your name:").strip() pwd = input("input your password:").strip() if name == 'Jason' and pwd == '123': res = func(*args, **kwargs) return res else: print("name or password error!") return wrapper @login def welcome(name): print("welcome %s to China !" % name) welcome('Jason')