概述
- 使用类定义装饰器,其实与带参装饰器的思路很类似;
- 只不过装饰器参数,是以创建装饰器实例的方式传入的;
- 对源函数的封装,则与无参装饰器是类似的,即返回一个包装函数作为源函数的替身;
- 专有方法_ call _以及系统装饰器@wraps(func)则是必须的语法规范;
- 与带参装饰器相比,使用类的方式来定义装饰器,显得更加灵活和科学;
案例
- 本例实现在源函数的头尾打印华丽的分割线,并上下各留5行空白;
- 定义装饰器类:
from functools import wraps
class fatman:
def __init__(self, margin=3):
self.margin = margin
def __call__(self, func):
@wraps(func)
def inner(*args, **kwargs):
print("\n" * self.margin, "----------")
func(*args, **kwargs)
print("----------", "\n" * self.margin)
return inner
- 使用fatman装饰hello函数,参数margin=5表示在hello执行时,在其头尾各打印5行空白,以凸显hello函数的执行结果:
@fatman(margin=5)
def hello(name, *args, boss=None, **kwargs):
print("name", name)
print("args", args)
print("boss", boss)
print("kwargs", kwargs)
- 调用装饰后的hello函数:
hello("bill", "jobs", "sirouyang", boss="god", fuck="shit")
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.youkuaiyun.com/pangzhaowen/article/details/80299631