裝飾器是Python中十分強(qiáng)大的一個(gè)功能。Python的裝飾器簡(jiǎn)單來說就是一個(gè)函數(shù),它可以在不影響原函數(shù)的情況下,對(duì)函數(shù)的功能進(jìn)行擴(kuò)展。類實(shí)現(xiàn)裝飾器,依賴于類的屬性和方法,比較直觀。
Python中的裝飾器通常是通過“@”語法實(shí)現(xiàn)的,例如在函數(shù)前加上一個(gè)“@decorator”的注釋,等同于對(duì)該函數(shù)使用“decorator”函數(shù)進(jìn)行裝飾。
# 示例1 def my_decorator(func): def wrapper(): print("before func") func() print("after func") return wrapper @my_decorator def say_hello(): print("hello")
上述代碼中,定義了一個(gè)my_decorator函數(shù)作為裝飾器,實(shí)現(xiàn)了在函數(shù)say_hello執(zhí)行前后打印一句話的功能。@my_decorator就是使用裝飾器的示例。
# 示例2 class MyDecorator: def __init__(self, func): self.func = func def __call__(self): print("begin") self.func() print("end") @MyDecorator def say_hello(): print("hello")
上述代碼中,定義了一個(gè)MyDecorator類,它可以用來裝飾函數(shù),實(shí)現(xiàn)在函數(shù)執(zhí)行前后打印一句話的功能。@MyDecorator就是使用類實(shí)現(xiàn)裝飾器的示例。
對(duì)比示例1和示例2,可以發(fā)現(xiàn)類實(shí)現(xiàn)裝飾器的方式可能更加靈活,實(shí)現(xiàn)邏輯也更加清晰,但是代碼的復(fù)雜度稍高。