Python基础:AOP与装饰器的详细介绍,零基础快速入门

  • A+
所属分类:python基础入门

此篇专门写给零基础的小伙伴,希望能帮到大家~

Python基础:AOP与装饰器的详细介绍,零基础快速入门

Python基础:AOP与装饰器的详细介绍,零基础快速入门

Python基础:AOP与装饰器的详细介绍,零基础快速入门

一、方法调用前

在调用之前检查方法参数是否合规,或者判断是否有相应的执行权限,这都是常用的手法,本例中检验第一个参数是否为正数,如果是,则执行加法,否则抛出错误,那我们可以定义如下装饰器:

Python基础:AOP与装饰器的详细介绍,零基础快速入门

Python基础:AOP与装饰器的详细介绍,零基础快速入门

现在继续执行添加注解与调用方式,就会出现你想要的结果,如下:

Python基础:AOP与装饰器的详细介绍,零基础快速入门

二、方法调用后与装饰器参数

这一般用于对结果进行处理,如类型转换,将对象转换为JSON字符串,或者结果判断等,如下:

Python基础:AOP与装饰器的详细介绍,零基础快速入门

请记住上面的调用层次,一定是先执行参数的方法,返回没有参数的装饰函数,最后返回封装后的结果函数,等同于after(5)(before(add(a, b))),调用方式如下:

Python基础:AOP与装饰器的详细介绍,零基础快速入门

三、方法调用前后(环绕)

Python基础:AOP与装饰器的详细介绍,零基础快速入门

Python基础:AOP与装饰器的详细介绍,零基础快速入门

四、方法调用异常

这种装饰器一般用于方法调用出现异常时,所以一定会携带装饰器参数,且参数为异常类型,然后处理逻辑会放在异常捕获语句中,示例如下:

Python基础:AOP与装饰器的详细介绍,零基础快速入门

经过异常装饰器处理后,你会返现,现在3除以0也不报错了,而是返回0,所以这适合统一的异常处理。

五、装饰器的顺序

Python基础:AOP与装饰器的详细介绍,零基础快速入门

Python基础:AOP与装饰器的详细介绍,零基础快速入门

为什么呢?因为执行round函数后,返回结果与参数都为None,所以执行after函数必然出错。

六、能保留原始信息的@wraps

Python基础:AOP与装饰器的详细介绍,零基础快速入门

结论

Python基础:AOP与装饰器的详细介绍,零基础快速入门

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: