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 这篇博客写装饰器,写的蛮好的。值得参考。

猜你喜欢

转载自www.cnblogs.com/peterhuang1977/p/9288655.html