python設(shè)計(jì)模式之裝飾器模式
裝飾器模式
裝飾器模式解決什么問題?
- 增加新功能,且不改變?cè)泄δ芎痛a
- 選配,根據(jù)不同情況,動(dòng)態(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專門的語法糖簡(jiǎn)化了裝飾器的使用。最外層函數(shù)接收一個(gè)函數(shù)對(duì)象并返回內(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對(duì)象。
- 實(shí)現(xiàn)相同的接口怎么理解?語法糖@xxxx的操作等價(jià)于
func = decorator(func),即將內(nèi)層函數(shù)重命名了原函數(shù)名。
到此這篇關(guān)于python設(shè)計(jì)模式之裝飾器模式的文章就介紹到這了,更多相關(guān)python裝飾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Tkinter中復(fù)選菜單是否被選中的判斷與設(shè)置方式
這篇文章主要介紹了Tkinter中復(fù)選菜單是否被選中的判斷與設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
基于Python開發(fā)高效文件搜索與內(nèi)容匹配工具
在日常的開發(fā)和辦公中,查找和篩選特定文件或文件內(nèi)容的需求十分常見,本文將基于PyQt6開發(fā)一個(gè)文件搜索工具,有需要的小伙伴可以參考一下2025-03-03
pyautogui自動(dòng)化控制鼠標(biāo)和鍵盤操作的步驟
這篇文章主要介紹了pyautogui自動(dòng)化控制鼠標(biāo)和鍵盤操作的步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
淺談Pandas Series 和 Numpy array中的相同點(diǎn)
今天小編就為大家分享一篇淺談Pandas Series 和 Numpy array中的相同點(diǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python GUI編程之tkinter模塊Toplevel控件實(shí)現(xiàn)搭建父子窗口
這篇文章主要介紹了Python使用tkinter模塊Toplevel控件搭建父子窗口的實(shí)現(xiàn)方法,Tkinter是Python的標(biāo)準(zhǔn)GUI庫,Python使用Tkinter可以快速的創(chuàng)建GUI應(yīng)用程序,用到相關(guān)控件的同學(xué)可以參考下2023-12-12
python中__slots__節(jié)約內(nèi)存的具體做法
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于python中__slots__節(jié)約內(nèi)存的具體做法,有需要的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07

