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

學(xué)無(wú)先后,達(dá)者為師

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

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

作者:??圖圖加油???? ? 更新時(shí)間: 2022-07-04 編程語(yǔ)言

裝飾器模式

裝飾器模式解決什么問(wèn)題?

  • 增加新功能,且不改變?cè)泄δ芎痛a
  • 選配,根據(jù)不同情況,動(dòng)態(tài)調(diào)整功能

裝飾器,顧名思義,就是用來(lái)裝飾其他實(shí)物,增加被裝飾物的功能而不改變被裝飾物。這就像我們買(mǎi)車(chē),同一款車(chē)型,有很多功能是選配的,但是車(chē)的核心功能不變。我們可以在購(gòu)買(mǎi)時(shí),根據(jù)需要選配不同的配置。

如何實(shí)現(xiàn)?

想象一下,你是一個(gè)裝修工,如果要裝飾一輛車(chē),那么你首先需要有一輛車(chē),而且在裝飾過(guò)程中,你不能夠改變車(chē)原有的功能(接口)。

如類(lèi)圖所示:

  • 核心功能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 裝飾器語(yǔ)法糖

裝飾器太常用了,python專(zhuān)門(mén)的語(yǔ)法糖簡(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ì)沒(méi)有變:保存接口實(shí)例,實(shí)現(xiàn)相同的接口。

  • 保存接口實(shí)例容易理解,因?yàn)閭魅肓撕瘮?shù)func對(duì)象。
  • 實(shí)現(xiàn)相同的接口怎么理解?語(yǔ)法糖@xxxx的操作等價(jià)于func = decorator(func),即將內(nèi)層函數(shù)重命名了原函數(shù)名。

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

欄目分類(lèi)
最近更新