素材牛VIP会员
【自学python】 学到装饰器,为了更好地理解,自己画了一个图,不知道理解的对不对,希望大家指正一下。
 疯***斯  分类:Python  人气:865  回帖:3  发布于6年前 收藏

有一个原始函数A,现在想要加上额外的功能,但是又不想破外本身代码。

这个函数B是自带其他功能的。
然后把函数A,当作一个函数B的参数,直接扔进去,结果就变成了:

然后最终把这个加上壳的函数A,重新再赋值给函数A
如图:

于是最终,最初的原始函数A,就变成了一个加了外壳新功能的函数A
这个就是装饰器。
打个不恰当的比喻,有点类似于电影《黑客帝国》里面人类的最后堡垒里面的外骨骼装甲机器人,都是一个普通的人类,然后坐上在了战斗机器里面,相当于给一个普通的人类穿上了一个战斗外套,这样既保留了人的特性,又给它加上了新功能,如图:

不知道我的理解对不对?

 标签:python

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv4 码徒
Su***er JS工程师 6年前#1

看看这个,http://mp.weixin.qq.com/s/0LI...

Lv3 码奴
上***水 职业无 6年前#2

大概思路是没有问题的,但是其中有一幅图我觉得画的不太对:在函数 B 里面,因该有一个新函数 A,在新函数 A 里面增加了功能1、功能2,并执行了原始函数 A。最后返回的应该是新函数 A,把原始函数 A 覆盖掉

Lv1 新人
非***扰 交互设计师 6年前#3

新函数A和原始函数A不应该重名,大致如下

def B(oldA):
    def newA(*args):
        print "wrapper"
        oldA(*args)
        print "wrapper end"
    return newA
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取