python設(shè)計模式之裝飾器模式
裝飾器模式
裝飾器模式解決什么問題?
- 增加新功能,且不改變原有功能和代碼
- 選配,根據(jù)不同情況,動態(tài)調(diào)整功能
裝飾器,顧名思義,就是用來裝飾其他實物,增加被裝飾物的功能而不改變被裝飾物。這就像我們買車,同一款車型,有很多功能是選配的,但是車的核心功能不變。我們可以在購買時,根據(jù)需要選配不同的配置。
如何實現(xiàn)?
想象一下,你是一個裝修工,如果要裝飾一輛車,那么你首先需要有一輛車,而且在裝飾過程中,你不能夠改變車原有的功能(接口)。
如類圖所示:
- 核心功能Core和所有裝飾器都必須實現(xiàn)Interface接口
- 所有裝飾器以組合的方式保存接口實例
class Core: def some_action(): pass class Decorator: def __init__(self,core): self.core = core def some_action(): .... self.core.some_action() .....
python 裝飾器語法糖
裝飾器太常用了,python專門的語法糖簡化了裝飾器的使用。最外層函數(shù)接收一個函數(shù)對象并返回內(nèi)層函數(shù),內(nèi)層函數(shù)是正真的執(zhí)行函數(shù)。
# 裝飾器定義 def decorator(func): def wrapper(*args,**kwargs): ..... result = func(*args,**kwargs) .... return result return wrapper # 裝飾器使用 @decorator def func(): pass
雖然形式變了,但是實質(zhì)沒有變:保存接口實例,實現(xiàn)相同的接口。
- 保存接口實例容易理解,因為傳入了函數(shù)func對象。
- 實現(xiàn)相同的接口怎么理解?語法糖@xxxx的操作等價于
func = decorator(func)
,即將內(nèi)層函數(shù)重命名了原函數(shù)名。
到此這篇關(guān)于python設(shè)計模式之裝飾器模式的文章就介紹到這了,更多相關(guān)python裝飾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
實例講解Python中g(shù)lobal語句下全局變量的值的修改
global是Python中的一個關(guān)鍵字用來,聲明一個局部變量為全局變量,這里我們來以實例講解Python中g(shù)lobal語句下全局變量的值的修改,需要的朋友可以參考下.2016-06-06Python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法示例
這篇文章主要介紹了Python實現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法,結(jié)合實例形式分析了Python單鏈表的定義、節(jié)點插入、刪除、打印等相關(guān)操作技巧,需要的朋友可以參考下2019-05-05python使用OpenCV實現(xiàn)多目標(biāo)跟蹤
這篇文章主要介紹了python使用OpenCV實現(xiàn)多目標(biāo)跟蹤,如何在OpenCV中使用MultiTracker類實現(xiàn)多目標(biāo)跟蹤API。在深入了解詳細(xì)信息之前,請查看下面列出的關(guān)于目標(biāo)跟蹤的帖子,以了解在OpenCV中實現(xiàn)的單個目標(biāo)跟蹤器的基礎(chǔ)知識,需要的朋友可以參考一下2022-04-04python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Python 200行代碼實現(xiàn)一個滑動驗證碼過程詳解
這篇文章主要介紹了Python 200行代碼實現(xiàn)一個滑動驗證碼過程詳解,各種各樣的驗證碼,比較高級的有滑動、點選等樣式,看起來好像挺復(fù)雜的,但實際上它們的核心原理還是還是很清晰的,本文章大致說明下這些驗證碼的原理以及帶大家實現(xiàn)一個滑動驗證碼2019-07-07