函式裝飾器 類裝飾器

2022-05-14 15:57:14 字數 2005 閱讀 7216

一:函式裝飾函式

defwrapfun(func):

definner(a, b):

print('

function name:

', func.__name__

) r =func(a, b)

return

r

return

inner

@wrapfun

defmyadd(a, b):

return a +b

print(myadd(2, 3))

二:函式裝飾類

defwrapclass(cls):

definner(a):

print('

class name:

', cls.__name__

)

return

cls(a)

return

inner

@wrapclass

class

foo():

def__init__

(self, a):

self.a =a

deffun(self):

print('

self.a =

', self.a)

m = foo('

xiemanr')

m.fun()

三:類裝飾函式

class

showfunname():

def__init__

(self, func):

self._func =func

def__call__

(self, a):

print('

function name:

', self._func.__name__

)

return

self._func(a)

@showfunname

defbar(a):

return

aprint(bar('

xiemanr'))

四:類裝飾類

class

showclassname(object):

def__init__

(self, cls):

self._cls =cls

def__call__

(self, a):

print('

class name:

', self._cls.__name__

)

return

self._cls(a)

@showclassname

class

foobar(object):

def__init__

(self, a):

self.value =a

deffun(self):

print

(self.value)

a = foobar('

xiemanr')

a.fun()

五:函式裝飾類中的方法

defwrapfun(func):

definner(*args, **kwargs):r =func(*args, **kwargs)

returnr

returninner

classfoobar(object):

def __init__(self, a):

self.value =a

@wrapfun  

deffun(self):

print(self.value)

a = foobar('xiemanr')

a.fun()

六:類裝飾器裝飾類中的方法:  會報錯,原因是fun被裝飾後變成了類的乙個屬性,而不是方法。

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

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

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

python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...

函式作裝飾器 ,類做裝飾器

用類寫裝飾器 func decorator func func abc 18 class decorator object def init self,f self.f f def call self,args,kwargs print decorator start self.f args,kwa...