一、基于函数实现
1、嵌套函数
代码实现:
1 from functools import wraps 2 3 4 def decorator(param): 5 def wrapper(func): 6 @wraps(func) 7 def verify(*args, **kwargs): 8 if param == 'g': 9 print(">>开始执行:{}".format(func.__name__)) 10 func(*args, **kwargs) 11 12 return verify 13 14 return wrapper 15 16 17 @decorator(param='g') 18 def func(): 19 print(">>生活如夏日流水般缓缓前进,我们不要焦急")
2、三方库decorator
代码实现
1 from decorator import decorator 2 3 @decorator 4 def decorator(func, param=None, *args, **kwargs): 5 if param == "g": 6 print(">>开始执行:{}".format(func.__name__)) 7 return func(*args, **kwargs) 8 9 10 @decorator(param='g') 11 def func(): 12 print(">>生活如夏日流水般缓缓前进,我们不要焦急")
二、基于类实现
1、不带参数
构造器传入被装饰函数
代码实现
1 class Decorator: 2 def __init__(self, func): 3 self.func = func 4 5 def __call__(self, *args, **kwargs): 6 print(">>开始执行:{}".format(self.func.__name__)) 7 return self.func(*args, **kwargs) 8 9 10 @Decorator 11 def func(): 12 print(">>生活如夏日流水般缓缓前进,我们不要焦急")
2、带参数
构造器传入参数
代码实现
1 class Decorator: 2 def __init__(self, param): 3 self.argument = param 4 5 def __call__(self, func): 6 def wrapper(*args, **kwargs): 7 if self.argument == 'g': 8 print(">>开始执行:{}".format(func.__name__)) 9 return func(*args, **kwargs) 10 return wrapper 11 12 13 @Decorator(param="g") 14 def func(): 15 print(">>生活如夏日流水般缓缓前进,我们不要焦急")标签:__,多种,方式,self,param,func,kwargs,装饰,def From: https://www.cnblogs.com/shixiaogu/p/16716433.html