摘自:https://www.cnblogs.com/zhzhang/p/11375774.html
# -*- 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")
