__call__
在python中,函式其實是乙個可呼叫的物件,例項物件可以用函式的形式表示
乙個類例項可以變成乙個可呼叫的物件,只需要實現方法__call__()
一、把類myclass變成可呼叫的物件:
class myclass(object):
def __init__(self, fn):
self.name = fn
print fn
def __call__(self, *args, **kwargs):
print "my name is ..."
self.name(*args, **kwargs)
print "my friend is ..."
def getinfo(test):
print test
cls = myclass(getinfo)
cls('tim')
列印:my name is ...
timmy friend is ...
二、把例項物件用類似於函式的形式表示,
class test():
def __init__(self):
pass
def __call__(self, num):
sum = 0
for i in range (num):
sum += i
return sum
t = test()
print t(10)
列印:45
python裝飾器:使用類來定義裝飾器(python中類例項可以當做函式一樣呼叫)
class myclass(object):
def __init__(self, fn):
self.name = fn
print fn
def __call__(self, *args, **kwargs):
print "my name is ..."
self.name(*args, **kwargs)
print "my friend is ..."
def getinfo(ni):
print ni
@myclass
def myfun(name, gender):
print "start..."
print name
print gender
print "end..."
myfun('bob', 'male')
列印:my name is ...
start...
bobmale
end...
my friend is ...
一、計算乙個網頁的pv流量
二、控制某些網頁的訪問,例如必須登入才能訪問
三、在某些函式的前後列印必要的日誌資訊
綜上:都是為了簡化函式的一些流程,將統一的**規範化,避免函式一些共性的**重複書寫
理解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
1.類中的 call 方法 我們在定義好乙個類後,例項化出乙個物件,如果對這個物件以直接在後邊加括號的方式進行呼叫,程式就會報錯。也就是在類中這種做法是錯誤的 而,如果乙個類中寫入了 call 方法,當我問在對例項物件以括號的方式進行呼叫時,call 方法中的語句就會被執行,如下 1 import ...
python 裝飾器和 property裝飾器
裝飾器 1 裝飾器函式的本質 乙個閉包函式 2 裝飾器函式的作用 在不修改原函式及其呼叫方式的情況下對原函式功能進行擴充套件 3 語法糖 格式 裝飾器名稱 4 建立帶返回值的裝飾器 5 建立傳遞引數的裝飾器 6 裝飾器的固定格式 def f definner args,kwargs ret f ar...