python裝飾器執行順序

2021-09-28 10:52:35 字數 2053 閱讀 1542

python 裝飾器

1) 2層裝飾器

def

decorator

(func)

:# todo

def(

*args,

**kwargs)

:# todo

func(

*args,

**kwargs)

# todo

# todo

3層裝飾器

'''

'''def

decorator3

(a=0

, b=0)

:# todo

def(func)

:# todo

def(

*args,

**kwargs)

:# todo

func(

*args,

**kwargs)

# todo

# todo

# todo

此處a,b可為任意指定引數,但不可以更改。

3) 類裝飾器, python中類本身是不可呼叫的, 需要實現__call__方法, 將類變為callable。

class

decorator

(object):

def__init__

(self, func)

: self.func = func

def__call__

(self,

*args,

**kwargs)

:# todo

self.func(

*args,

**kwargs)

# todo

'''

'''class

decorator2

(object):

def__call__

(self, func)

:# todo

def(

*args,

**kwargs)

:# todo

func(

*args,

**kwargs)

# todo

# todo

'''

'''import time

deflog

(level=

"info"):

print

"log"

def(f)

:print

def(

*args,

**kwargs)

:print

print

": "

.format

(level, time.time())

f(*args,

**kwargs)

print

": "

.format

(level, time.time())

print

print

print

"end"

deflog2

(f):

print

"log2..."

def(

*args,

**kwargs)

:print

"log2"

f(*args,

**kwargs)

print

"log2"

print

"log2..."

@log2

@log(level=

"debug"

)def

test

(a, b)

:print a, b

執行test,輸出

參見:結果如上圖所示。

Python 裝飾器執行順序

nisen的 python 裝飾器執行順序迷思 原址 裝飾器是python用於封裝函式或 的工具,網上可以搜到很多文章可以學習,我在這裡要討論的是多個裝飾器執行順序的乙個迷思。大部分涉及多個裝飾器裝飾的函式呼叫順序時都會說明它們是自上而下的,比如下面這個例子 def decorator a func...

Python 裝飾器執行順序

之前同事問到兩個裝飾器在 中使用順序不同會不會有什麼問題,裝飾器是對被裝飾的函式做了一層包裝,然後執行的時候執行了被包裝後的函式,例如 def decorator a fun def inner a args,kwargs print inner a return fun args,kwargs r...

Python 裝飾器執行順序迷思

裝飾器是python用於封裝函式或 的工具,網上可以搜到很多文章可以學習,我在這裡要討論的是多個裝飾器執行順序的乙個迷思。大部分涉及多個裝飾器裝飾的函式呼叫順序時都會說明它們是自上而下的,比如下面這個例子 def decorator a func print get in decorator a d...