2005年09月24日 星期六 22:51
def printBeginEnd(fn): def _printBeginEnd(self): print "%s begins!" %fn.__name__ result = fn(self) print "%s ends!" %fn.__name__ return result return _printBeginEnd class foobar: def foo(self): #print "foo" return 'foo' foo = printBeginEnd(foo) if __name__=='__main__': f1 = foobar() print f1.foo() foo = printBeginEnd(foo)这句和foo()函数的关系是什么啊?为什么程序执行的结果会是下面这样那: foo begins! foo ends! foo -- 想飞之心,永远不死!
2005年09月24日 星期六 23:02
在 05-9-24,wang bin<wangbin1979 at gmail.com> 写道: > def printBeginEnd(fn): > def _printBeginEnd(self): > print "%s begins!" %fn.__name__ > result = fn(self) > print "%s ends!" %fn.__name__ > return result > return _printBeginEnd > > class foobar: > def foo(self): > #print "foo" > return 'foo' > foo = printBeginEnd(foo) > > if __name__=='__main__': > f1 = foobar() > print f1.foo() > > foo = printBeginEnd(foo)这句和foo()函数的关系是什么啊?为什么程序执行的结果会是下面这样那: > foo begins! > foo ends! > foo 在python 2.4中这种处理已经有标准的语法支持叫decorator,用这种语法写的话printBeginEnd不用变,只是把类中的写法改为: class foobar: @printBeginEnd def foo(self): #print "foo" return 'foo' 关于decorator,它的主要作用就是对类的方法进行预处理,如上面就是使用printBeginEnd对foo函数进行了特殊处理,这个printBeginEnd将返回一个新函数,然后再赋给foo,因此decorator的语法其实就是: foo = printBeginEnd(foo) 那么在处理之后foo已经是另一个新函数了。这样的好处是当你对原函数进行修改后,不用直接修改原函数而是通过decorator的处理,创建一个新函数作一些特殊处理,在这个新函数中可以调也可以不调原函数。而且decorator对于函数的参数还有几种变化可以看一看相应的文档。 -- I like python! My Donews Blog: http://www.donews.net/limodou
2005年09月25日 星期日 17:49
这难道就是Python中的AOP? 在05-9-24,limodou <limodou at gmail.com> 写道: > > 在 05-9-24,wang bin<wangbin1979 at gmail.com> 写道: > > def printBeginEnd(fn): > > def _printBeginEnd(self): > > print "%s begins!" %fn.__name__ > > result = fn(self) > > print "%s ends!" %fn.__name__ > > return result > > return _printBeginEnd > > > > class foobar: > > def foo(self): > > #print "foo" > > return 'foo' > > foo = printBeginEnd(foo) > > > > if __name__=='__main__': > > f1 = foobar() > > print f1.foo() > > > > foo = printBeginEnd(foo)这句和foo()函数的关系是什么啊?为什么程序执行的结果会是下面这样那: > > foo begins! > > foo ends! > > foo > > 在python 2.4中这种处理已经有标准的语法支持叫decorator,用这种语法写的话printBeginEnd不用变,只是把类中的写法改为: > > class foobar: > @printBeginEnd > def foo(self): > #print "foo" > return 'foo' > > > 关于decorator,它的主要作用就是对类的方法进行预处理,如上面就是使用printBeginEnd对foo函数进行了特殊处理,这个printBeginEnd将返回一个新函数,然后再赋给foo,因此decorator的语法其实就是: > > foo = printBeginEnd(foo) > > > 那么在处理之后foo已经是另一个新函数了。这样的好处是当你对原函数进行修改后,不用直接修改原函数而是通过decorator的处理,创建一个新函数作一些特殊处理,在这个新函数中可以调也可以不调原函数。而且decorator对于函数的参数还有几种变化可以看一看相应的文档。 > > -- > I like python! > My Donews Blog: http://www.donews.net/limodou > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050925/e1ce3390/attachment.html
2005年09月25日 星期日 19:12
在 05-9-25,ajax chelsea<ajaxchelsea at gmail.com> 写道: > 这难道就是Python中的AOP? 不是AOP。 -- I like python! My Donews Blog: http://www.donews.net/limodou
Zeuux © 2025
京ICP备05028076号