如何寫一個Python萬能裝飾器,既可以裝飾有參數的方法,也可以裝飾無參數方法,或者有無返回值都可以裝飾


需求:定義一個裝飾器,既可以裝飾有參數的方法,又可以裝飾沒有參數的方法,既可以裝飾有返回值的方法,又可以裝飾沒有返回值的方法

代碼如下:

def decorate(test):             #定義一個裝飾器函數

    def bold(*args,**kwargs):           #*args可以接收任意多個參數,**kwargs可以接受任意多個字典參數

        print('style="font-weight:blod"')  # 替換成你自己的代碼

        res = test(*args,**kwargs)   #這樣寫,即使被裝飾的test函數沒有參數或者沒有返回值都沒關系,不會報錯

        return res             #test函數有返回值就返回,沒有就返回None

    return bold

 

以上的代碼就完成了python萬能裝飾器的寫法,(*args,**kwargs)可以接收任意個數任意類型的參數,有沒有返回值都可以return。修改print這句話為自己想要的功能,就是自己的萬能裝飾器了。這樣一來,就可以裝飾任意的函數了。

測試一下上面的代碼:

@decorate               #裝飾一個沒有任何參數沒有返回值的方法
def test1():
    print("test1:沒有參數,沒有返回值")     


@decorate               #裝飾一個有一個參數的方法
def test2(name):
    print("test2:帶參數%s"%name)


@decorate         #裝飾一個有返回值的方法
def test3():
        strs = "test3:帶返回值"
        return strs


test1()               
#結果為:

#style="font-weight:blod"
#test1:沒有參數,沒有返回值 test2("ss")
#結果為:

#style="font-weight:blod"
#test2:帶參數ss a = test3() print(a)
#結果為:
#style="font-weight:blod"
#test3:帶返回值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM