日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

python設(shè)計模式之裝飾器模式_python

作者:??圖圖加油???? ? 更新時間: 2022-07-04 編程語言

裝飾器模式

裝飾器模式解決什么問題?

  • 增加新功能,且不改變原有功能和代碼
  • 選配,根據(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ù)名。

原文鏈接:https://juejin.cn/post/7095776102341148708

欄目分類
最近更新