python設計模式之裝飾器模式
裝飾器模式
裝飾器模式解決什么問題?
- 增加新功能,且不改變原有功能和代碼
- 選配,根據不同情況,動態(tài)調整功能
裝飾器,顧名思義,就是用來裝飾其他實物,增加被裝飾物的功能而不改變被裝飾物。這就像我們買車,同一款車型,有很多功能是選配的,但是車的核心功能不變。我們可以在購買時,根據需要選配不同的配置。
如何實現(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ù)對象并返回內層函數(shù),內層函數(shù)是正真的執(zhí)行函數(shù)。
# 裝飾器定義
def decorator(func):
def wrapper(*args,**kwargs):
.....
result = func(*args,**kwargs)
....
return result
return wrapper
# 裝飾器使用
@decorator
def func():
pass雖然形式變了,但是實質沒有變:保存接口實例,實現(xiàn)相同的接口。
- 保存接口實例容易理解,因為傳入了函數(shù)func對象。
- 實現(xiàn)相同的接口怎么理解?語法糖@xxxx的操作等價于
func = decorator(func),即將內層函數(shù)重命名了原函數(shù)名。
到此這篇關于python設計模式之裝飾器模式的文章就介紹到這了,更多相關python裝飾器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
淺談Pandas Series 和 Numpy array中的相同點
今天小編就為大家分享一篇淺談Pandas Series 和 Numpy array中的相同點,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python GUI編程之tkinter模塊Toplevel控件實現(xiàn)搭建父子窗口
這篇文章主要介紹了Python使用tkinter模塊Toplevel控件搭建父子窗口的實現(xiàn)方法,Tkinter是Python的標準GUI庫,Python使用Tkinter可以快速的創(chuàng)建GUI應用程序,用到相關控件的同學可以參考下2023-12-12
python中__slots__節(jié)約內存的具體做法
在本篇內容里小編給大家分享的是一篇關于python中__slots__節(jié)約內存的具體做法,有需要的朋友們可以跟著學習參考下。2021-07-07

