from functools import wraps
class CountCalls:
def __init__(self, prefix):
self.prefix = prefix
def __call__(self, func):
# 将一些重要的元数据从原始函数(即被装饰的函数 func)复制到包装函数(即装饰器内部定义的函数 wrapper)。这些元数据包括函数的名称 __name__、文档字符串 __doc__、以及其他由用户定义的属性。
@wraps(func)
def wrapper(*args, **kwargs):
print(self.prefix, "在函数执行前做点什么")
result = func(*args, **kwargs)
print(self.prefix, "在函数执行后做点什么")
return result
return wrapper
@CountCalls(prefix='LOG:')
def say_hello():
print("Hello!")
say_hello()
|