python類裝飾器即__call__方法


上一篇中我對學習過程中的裝飾器進行了總結和整理,這一節簡單整理下類裝飾器

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()

#結果為:
#我可以對函數進行裝飾
#----------------------------
#測試一下可不可以.
    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM