python使用類作為裝飾器


1、普通就是一個函數作為裝飾器,也可以用類名作為裝飾器。

因為類和函數都是callable的,都可以使用括號來調用運行他。

 

2、上上篇的緩存一段時間的還是函數作為裝飾器,類只是充當了比模塊更下一級的命名空間,因為我的模塊很大,不想搞很多模塊級全局變量,所以用了class外殼。

 

正宗的類裝飾器是這樣

from functools import update_wrapper
class Deco:
    """
    Deco 的document
    """

    def __init__(self,func):
        self._func = func
        self._func_name = func.__name__
        update_wrapper(self, self._func)

    def __call__(self):
        print('啦啦啦德瑪西亞')
        return self._func,self._func_name,self._func()




@Deco
def f1():
    """
    f1 的document
    :return:
    """
    return 'hello world'
print(f1)
print(f1.__doc__)
print (f1())

結果是這樣

 

好處是相比於函數裝飾器少了閉包,缺點是函數行為變了,但函數簽名沒有完全變過來,這樣運行后函數成了裝飾器類的一個實例了。

 

 

使用類作為裝飾器來裝飾一個函數和使用函數作為裝飾器來裝飾一個類是不同的概念。

 

函數裝飾器來裝飾一個類,也寫過了  https://www.cnblogs.com/ydf0509/p/9211521.html


免責聲明!

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



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