Python面向对象学习之八,装饰器
Posted peterhuang1977
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面向对象学习之八,装饰器相关的知识,希望对你有一定的参考价值。
装饰器是python基础中比较重要的知识点之一。它用来扩展函数功能,使之符合开放封闭原则。下面是典型的代码片段。
def w1(func):
def inner():
print(‘...验证权限...‘)
func()
return inner
@w1
def f1():
print(‘f1 called‘)
@w1
def f2():
print(‘f2 called‘)
f1()
f2()
首先,开看我们的装饰器函数w1,该函数接收一个参数func,其实就是接收一个方法名,w1内部又定义一个函数inner,在inner函数中增加权限校验,并在验证完权限后调用传进来的参数func,同时w1的返回值为内部函数inner,其实就是一个闭包函数。
然后,再来看一下,在f1上增加@w1,那这是什么意思呢?当python解释器执行到这句话的时候,会去调用w1函数,同时将被装饰的函数名作为参数传入(此时为f1),根据闭包一文分析,在执行w1函数的时候,此时直接把inner函数返回了,同时把它赋值给f1,此时的f1已经不是未加装饰时的f1了,而是指向了w1.inner函数地址。
接下来,在调用f1()的时候,其实调用的是w1.inner函数,那么此时就会先执行权限验证,然后再调用原来的f1(),该处的f1就是通过装饰传进来的参数f1。
这样下来,就完成了对f1的装饰,实现了权限验证。
https://blog.csdn.net/u010358168/article/details/77773199 这篇博客写装饰器,写的蛮好的。值得参考。
以上是关于Python面向对象学习之八,装饰器的主要内容,如果未能解决你的问题,请参考以下文章