概述
使用类定义装饰器,其实与带参装饰器的思路很类似;只不过装饰器参数,是以创建装饰器实例的方式传入的;对源函数的封装,则与无参装饰器是类似的,即返回一个包装函数作为源函数的替身;专有方法_ 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.csdn.net/pangzhaowen/article/details/80299631
