Python decorator裝飾器的使用示例

2021-10-14 20:13:11 字數 1769 閱讀 2430

定義乙個裝飾器

def

decorator

(func)

:def

(*arg,

**kwargs)

:print

("before"

) ret = func(

*arg,

**kwargs)

print

("after"

)return ret

使用示例

# -*- coding: utf-8 -*-

# 作用於普通方法

@decorator

deffoo

(name)

:print

('my name is:'

, name)

class

foo(

object):

# 作用於例項方法

@decorator

deffoo(self, name)

:print

('my name is:'

, name)

# 作用於類方法

@classmethod

@decorator

defclass_foo

(cls, name)

:print

('my name is:'

, name)

# 作用於靜態方法

@staticmethod

@decorator

defstatic_foo

(name)

:print

('my name is:'

, name)

if __name__ ==

'__main__'

: foo(

'tom'

) foo(

).foo(

'tom'

) foo.class_foo(

'tom'

) foo.static_foo(

'tom'

)"""

4中方式都可以正常執行,輸入如下

before

my name is: tom

after

"""

如果把裝飾器函式引數修改了

def

decorator

(func)

:def

(name)

:print

("before"

)# ret = func(*arg, **kwargs)

# 取消原來的不定引數,寫為固定引數

ret = func(name)

print

("after"

)return ret

執行結果

# 普通函式可以正常執行

foo(

'tom'

)# 靜態方法可以正常執行

foo.static_foo(

'tom'

)# 例項方法報錯

foo(

).foo(

'tom'

)# 類方法報錯

foo.class_foo(

'tom'

)

綜上,一般情況下需要寫成不定引數的形式,相容性更強

參考

詳解python的裝飾器

裝飾器的使用

import platform def judge platform func def add env parameter a,b if platform.system windows env windows else env linux return func env,a,b return add...

python 裝飾器的使用

使用裝飾器將函式作為引數,最後再返回乙個引數,簡單來說就是在不修改原函式的 上對原函式新增新的功能。1 在原函式中新增乙個裝飾器 原函式 def sayhello print hello,world sayhello 新增裝飾器後 import functools def decorator fun...

裝飾器的簡單使用

要玩裝飾器,就要知道閉包,何為閉包?我們要從閉包的三要素說起 1.函式巢狀 即乙個函式內部還有乙個函式。2.外部函式返回值為內部函式 名 3.內部函式要用到外部函式的變數。為啥要用裝飾器呢?我的理解為,在不改變原碼的基礎上拓展某些功能,不用再寫一遍 了,在某些程度上減少了 的冗餘。看 import ...