溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中如何實現(xiàn)裝飾器模式

發(fā)布時間:2021-06-22 17:12:12 來源:億速云 閱讀:118 作者:Leah 欄目:編程語言

python中如何實現(xiàn)裝飾器模式,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

裝飾器模式,在不修改原函數(shù)的代碼情況下,對原函數(shù)的功能進行擴展

# 自定義裝飾器,old參數(shù)為原函數(shù)
def decorator01(old):
    # 創(chuàng)建一個內(nèi)部函數(shù),在該內(nèi)部函數(shù)中調(diào)用原函數(shù),并在調(diào)用前后編寫擴充功能的代碼
    # *args , **kwargs表示接受任意的可變參數(shù)以及關鍵字參數(shù)
    def new_function(*args , **kwargs):
        print('開始執(zhí)行~~~~')
        # 調(diào)用被擴展的函數(shù)
        result = old(*args , **kwargs)
        print('執(zhí)行結(jié)束~~~~')
        # 內(nèi)部函數(shù)返回原函數(shù)的執(zhí)行結(jié)果
        return result
    # 返回內(nèi)部函數(shù)函數(shù)
    return new_function

def decorator02(old):
    def new_function(*args , **kwargs):
        print('decorator02裝飾~開始執(zhí)行~~~~')
        # 調(diào)用被擴展的函數(shù)
        result = old(*args , **kwargs)
        print('decorator02裝飾~執(zhí)行結(jié)束~~~~')
        # 返回函數(shù)的執(zhí)行結(jié)果
        return result

    # 返回新函數(shù)
    return new_function

# 使用注解修飾原函數(shù)
@decorator02
@decorator01
def say_hello():
    print('大家好~~~')

# 執(zhí)行原函數(shù),則會先執(zhí)行裝飾器中擴展的功能代碼
say_hello()
  • 一個原函數(shù)可以被多個裝飾器修飾,裝飾器執(zhí)行的順序是從下到上,即從注解最近的裝飾器開始,依次向外執(zhí)行。

# 執(zhí)行結(jié)果
decorator02裝飾~開始執(zhí)行~~~~
開始執(zhí)行~~~~
大家好~~~
執(zhí)行結(jié)束~~~~
decorator02裝飾~執(zhí)行結(jié)束~~~~

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI