设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 14214|回复: 3
打印 上一主题 下一主题

问一个关于装饰器的

[复制链接]

1

主题

0

好友

9

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2016-8-10 00:00:37 |只看该作者 |倒序浏览
我的问题是,为什么装饰器所装饰的方法,被调用的时候,不会执行装饰器中的代码,新手求指导!

代码如下:
#encoding=utf-8
def info():
    print "调用Info"
    return "info()"
print "---普通模式---"
res = info()
print "调用结果为:" + res;
print "--------------"

def decoInfo(function):
    print "[DEBUG] 调用函数之前"
    return function

print "---装饰器模式---"
info = decoInfo(info)#只调用一次装饰器的代码 ???
print "--- 完成装饰 ---"
res = info()#此处仍为旧的代码 ???
res2 = info()
print "调用结果为:" + res;
print "调用结果为:" + res2;
print "----------------"
运行结果如下:
---普通模式---
调用Info
调用结果为:info()
--------------
---装饰器模式---
[DEBUG] 调用函数之前
--- 完成装饰 ---
调用Info
调用Info
调用结果为:info()
调用结果为:info()
----------------



回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2016-8-10 10:36:35 |只看该作者
info = decoInfo(info)
这句执行完,info就已经被赋值为一个函数了,下次调用info(),decoInfo就不会再执行了
后面那个不是“仍为旧的代码”,只是你新旧代码都是同一个函数
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

9

积分

新手上路

Rank: 1

板凳
发表于 2016-8-10 22:33:14 |只看该作者
crossin先生 发表于 2016-8-10 10:36
info = decoInfo(info)
这句执行完,info就已经被赋值为一个函数了,下次调用info(),decoInfo就不会再执行 ...

谢谢,我理解错误了.
我一开始理解为 info重新指向了decoInfo 这个函数了
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2016-8-11 11:13:42 |只看该作者
kiss 发表于 2016-8-10 22:33
谢谢,我理解错误了.
我一开始理解为 info重新指向了decoInfo 这个函数了

那就是 info = decoInfo ,不是调用
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 11:40 , Processed in 0.033775 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部