2022-09-18 類裝飾器的定義: 使用一個類作為一個裝飾器,在類裡面對已有函數添加其他功能。 類裝飾器使用的一個實例: 1 class MyDecorator(object): 2 def __init__(self,func): 3 self.__func = func 4 5 def __ ...
2022-09-18
類裝飾器的定義:
使用一個類作為一個裝飾器,在類裡面對已有函數添加其他功能。
類裝飾器使用的一個實例:
1 class MyDecorator(object): 2 def __init__(self,func): 3 self.__func = func 4 5 def __call__(self, *args, **kwargs): 6 print("課已講完") 7 self.__func() 8 9 @MyDecorator 10 def show(): 11 print("快要下課啦") 12 13 show()
說明:
第10-11行,原來的函數
第1-7行,定義了一個類裝飾器,為原來的函數添加其他功能。註意:如果此時是類作為裝飾器的話,之前裝飾器中傳入的函數現在應該放在的位置在“__init__”構造函數中。
第3行,為了在下麵的代碼中調用func函數,所以此處要將傳入的"func"參數作為一個屬性。“self.__func”,在func前面加了兩個下劃線表示將該func屬性作為一個私有屬性。
第5行,為了在下麵函數調用中直接使用類對象名調用,使用此處要使用“__call__”,它的目的是將對象作為一個可調用的對象。
第6行,增加的新的功能。
第7行,調用“__func()”函數,註意,此處調用的是一個函數,而非上面的屬性,因此要加上括弧。因為是在類的內部調用的本類傳入的參數,所以要使用“self”。
第9行,類裝飾器語法糖,表示給原來的函數增加新的功能。
運行結果圖: