python類裝飾器即 call

2022-05-18 15:28:52 字數 1070 閱讀 2053

1.類中的__call__方法:

我們在定義好乙個類後,例項化出乙個物件,如果對這個物件以直接在後邊加括號的方式進行呼叫,程式就會報錯。也就是在類中這種做法是錯誤的;

而,如果乙個類中寫入了__call__方法,當我問在對例項物件以括號的方式進行呼叫時,__call__方法中的語句就會被執行,**如下:

1

import

time2#

定義乙個time類

3class

time(object):

4def

__init__

(self,a):

5 self.a =a

6def

__call__(self, *args, **kwargs):

7print

(self.a )8#

對類進行例項化

9 now =time.ctime()

10 c =time(now)11#

呼叫類中的call方法

12c()13#

結果為:tue jun 12 17:28:53 2018

#

定義乙個time類

class

time(object):

def__init__(self,func): #

注意這裡要設定引數接收test

self._func =func

def__call__

(self):

print('

我可以對函式進行裝飾')

print("

----------------------------

")

self._func()

@time

#等價於 test = time(test)

deftest():

print('

測試一下可不可以.')

test()

#結果為:

#我可以對函式進行裝飾

#----------------------------

#測試一下可不可以.

理解Python類裝飾器 call

coding utf 8 深入理解類裝飾器 一 類裝飾器 都不帶引數 class clsdeco def init self,func self.func func def call self,args,kwargs print f running self.func print end clsde...

Python裝飾器和 call

call 在python中,函式其實是乙個可呼叫的物件,例項物件可以用函式的形式表示 乙個類例項可以變成乙個可呼叫的物件,只需要實現方法 call 一 把類myclass變成可呼叫的物件 class myclass object def init self,fn self.name fn print...

python裝飾器 函式裝飾器,類裝飾器

只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...