最近看到有个装饰器的例子,没看懂,
#!/usr/bin/python
class decorator(object):
def __init__(self,f):
print "initial decorator"
f()
def __call__(self):
print "call decorator"
@decorator
def fun():
print "in the fun"
print "after "
fun()
从*看到了浏览最多的关于python装饰器的文章,下面是这个文章的网址
http://*.com/questions/739654/how-can-i-make-a-chain-of-function-decorators-in-python/1594484#1594484
感觉写的挺好的,我自己也总结总结。
问题是lz想写个装饰器:
@makebold
@makeitalic
def say():
return "Hello"
有这样的输出:
"<b><i>Hello</i></b>"
看到最短的回复是:
def makebold(f):
return lambda: "<b>" + f() + "</b>"
def makeitalic(f):
return lambda: "<i>" + f() + "</i>" @makebold
@makeitalic
def say():
return "Hello" print say()
太经典了,
最开始的例子,先写段代码:
#de 就代表decorator吧,简单些O(∩_∩)O~,
def de(f):
def wr():
print "before func"
f()
print "after func"
return wr def func():
print "this is func self"
#先运行一遍代码
func()
#装饰函数
de_func=de(func)
#运行装饰了之后的函数
de_func()
#或者
#装饰函数
func=de(func)
#运行装饰了之后的函数
func()
#或者
de(func)()
还有一处需要理解的就是类的__call__方法是在instance=classname()()(也可以写成instance=classname();instance())的时候调用的
python 自己的装饰器就是:
#还可以在函数定义之前加上@de
@de
def func1():
print "**this is func self"
func1()
理解了上面之后文章开头的例子也可以写成这样
class decorator(object):
def __init__(self,f):
print "initial decorator"
f()
def __call__(self):
print "call decorator"
# @decorator
def fun():
print "in the fun"
fun=decorator(fun)
print "after "
fun()
有仔细看了那篇文章,感觉受益匪浅,也是自己当初学的时候没好好听吧。