裝飾器(decorator)是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯**的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下:
@decorator
def core_service:
要理解上述**的含義,我們從自定義函式裝飾器的原理出發。以下是示例**:
importos, sys
defdecorator():
print('get in decorator')
func()
returndecorator
defcore_service():
print('get in core_service')
if__name__ == '__main__':
core_service()
執行結果:
get in decorator
get in core_service
以上編寫裝飾器**的步驟比較多,且模式是固定的,因此python提供了語言級別的封裝。上述**可以抽象成如下形式,結果同上:
importos, sys
defdecorator():
print('get in decorator')
func()
returndecorator
print('get in core_service')
if__name__ == '__main__':
core_service()
defcore_service():
print('get in core_service')
python直譯器會將這段**解析成以下形式:
defcore_service():
print('get in core_service')
通過以上分析,我們已經清楚了裝飾器原理。真實的裝飾器還會帶有各種引數,實現各種複雜的功能,這些都是建立在這個基本原理的基礎之上。下面我們再通過乙個類裝飾器的示例**來結束這個主題:
importos, sys
defdecorator():
print('get in decorator')
returncls()
returndecorator
def__init__(self):
print('new core object')
if__name__ == '__main__':
core = core()
執行結果:
get in decorator
new core object
裝飾器原理
裝飾器,原理 開放封閉原則 def outer func func 原來的f1函式 def inner args,kwargs args,kwargs裝飾器就這麼寫,可以應對多個引數 print ok1 r func args,kwargs r等於none print ok2 return r re...
PYTHON 裝飾器 的應用原理
今天回顧了一下裝飾器知識,來記錄一下個人的體悟.看了幾個大神的部落格,對裝飾器的解釋如下 假設我們要增強函式的功能,比如,在函式呼叫前後自動列印,但又不希望修改函式的定義,這種在 執行期間動態增加功能的方式,稱之為 裝飾器 decorator 我個人覺得說的太籠統,因為我下面的 完成了上述的要求卻不...
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...