上一篇中我對學習過程中的裝飾器進行了總結和整理,這一節簡單整理下類裝飾器
1.類中的__call__方法:
我們在定義好一個類后,實例化出一個對象,如果對這個對象以直接在后邊加括號的方式進行調用,程序就會報錯。也就是在類中這種做法是錯誤的;
而,如果一個類中寫入了__call__方法,當我問在對實例對象以括號的方式進行調用時,__call__方法中的語句就會被執行,代碼如下:
1 import time 2 # 定義一個Time類 3 class Time(object): 4 def __init__(self,a): 5 self.a = a 6 def __call__(self, *args, **kwargs): 7 print(self.a ) 8 # 對類進行實例化 9 now = time.ctime() 10 c = Time(now) 11 # 調用類中的call方法 12 c() 13 # 結果為:Tue Jun 12 17:28:53 2018
2.類作為裝飾器的底層原理和上一篇中所談到的是一致的,以下邊代碼為示例:
# 定義一個Time類 class Time(object): def __init__(self,func): # 注意這里要設定參數接收Test self._func = func def __call__(self): print('我可以對函數進行裝飾') print("----------------------------") self._func() @Time # 等價於 Test = Time(Test) def Test(): print('測試一下可不可以.') Test() #結果為: #我可以對函數進行裝飾 #---------------------------- #測試一下可不可以.