码迷,mamicode.com
首页 > 编程语言 > 详细

Python面向对象学习之八,装饰器

时间:2018-07-10 14:40:35      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:代码   参数   通过   开放封闭原则   接收   python解释器   函数   cal   turn   

装饰器是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面向对象学习之八,装饰器

标签:代码   参数   通过   开放封闭原则   接收   python解释器   函数   cal   turn   

原文地址:https://www.cnblogs.com/peterhuang1977/p/9288655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!