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