用類作為裝飾器裝飾函數!
阿新 • • 發佈:2018-08-13
為什麽 init 相等 初始化 UNC ron 定義 成了 初始 在python中我們可以利用一個函數作為裝飾器來裝飾另一個函數,但是裝飾器只能是函數嗎 ?當然了我們還可以使用類來作為裝飾器!
class A(object): def __init__(self,func): print(‘定義初始化函數‘) print(‘func name is %s‘%func.__name__) self.__func = func def __call__(self): print(‘call 方法作為裝起中的功能‘) self.__func() print(‘增加的功能2‘) # @A def B(): print(‘這個是B是原函數‘) # A(B) #如果不看裝飾器的作用的話,這裏的 A(B)和上面的 @A相等作用相同,但是這裏的作用就是是裝飾器了,就只是簡單的函數調用了,所以就不會調用call方法了
這個的輸出結果是:
定義初始化函數
func name is B
註意:
這裏的為什麽會打印出B而不是A,我簡單的解釋下,
我們把A當做裝飾器調用,也就相當於調用了A這個類A(B)
這樣的話我們就傳入了參數B這個函數,所以func.name這個就是B了
這裏初始化的調用就完成了
class A(object): def __init__(self,func): print(‘定義初始化函數‘) print(‘func name is %s‘%func.__name__) self.__func = func def __call__(self): print(‘call 方法作為裝起中的功能‘) self.__func() print(‘增加的功能2‘) @A def B(): print(‘這個是B是原函數‘) # A(B) B()
這個的輸出結果是:
定義初始化函數
func name is B
call 方法作為裝起中的功能
這個是B是原函數
增加的功能2
註:
這裏我們把類當做裝飾器了,所以他就會去調用call方法,也就自然會調用下面的方法了!
用類作為裝飾器裝飾函數!