# -*- coding: utf-8 -*- # author:baoshan # 帶參數的類裝飾器(和不帶參數的類裝飾器有很大的不同) # 類裝飾器的實現,必須實現__call__和__init__兩個內置函數。 # __init__:不再接收被裝飾函數,而是接收傳入參數; # __call__:接收被裝飾函數,實現裝飾邏輯 class logger(object): def __init__(self, level='INFO'): self.level = level def __call__(self, func): def wrapper(*args, **kwargs): print("[{level}]: the function {func}() is running...".format(level=self.level, func=func.__name__)) func(*args, **kwargs) return wrapper @logger(level="WARNING") def say(something): print("say {}!".format(something)) say("hello")
運行結果:
[WARNING]: the function say() is running... say hello!
參考自:https://zhuanlan.zhihu.com/p/65968462
謝謝!