Python裝飾器的幾種書寫方式

2021-10-04 16:13:48 字數 1927 閱讀 1303

from functools import wraps import wrapt

class

authorparams

(object):

"""帶引數的類的裝飾器"""

def__init__

(self, level)

: self.level = level

def__call__

(self, func)

: @wraps(func)

defwarpper

(*args,

**kwargs)

:print

("在進入檢視函式之前執行相應的**"

)return func(

*args,

**kwargs)

return warpper

class

authoritic

(object):

"""不帶引數類的裝飾器"""

def__init__

(self, func)

: self.func = func

def__call__

(self,

*args,

**kwargs)

:return self.func(

*args,

**kwargs)

def

funcauthorit

(func)

:"""不帶引數的閉包裝飾器"""

@wraps(func)

defwarpper

(*args,

**kwargs)

: func1 = func(

*args,

**kwargs)

return func1

return warpper

def

funcauthorparams

(level)

:"""帶引數的閉包裝飾器"""

deffuncthor

(func)

:def

warpper

(*args,

**kwargs)

:print

("在進入檢視函式之前執行相應的**"

)return func(

*args,

**kwargs)

return warpper

return functhor

@wrapt.decorator

def(warpped, instance, args, kwargs)

:print

("在進入檢視函式之前執行相應的**"

)return warpped(

*args,

**kwargs)

def

logging

(level)

: @wrapt.decorator

def:# instance表明傳入的物件的例項

print

("在進入檢視函式之前執行相應的**"

)*args,

**kwargs)

@authorparams(level=

"debug"

)def

test()

:print

("執行相應的功能**"

)

if __name__ ==

'__main__'

:# 執行**

test(

)

裝飾器的幾種形式

1.無引數無返回值 def setfunc func def print start func print end setfunc setfunc show defshow print show show start show end2.無參有返回值 def setfunc func def pri...

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...