Python裝飾器和 call

2021-09-02 18:26:59 字數 1519 閱讀 2432

__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...