pythonでの装飾

4565 ワード


オブジェクト(OOP)向けのデザインモードではdecoratorを装飾モードと呼ぶ.OOPの装飾モードは継承と組合せで実現する必要があるが,PythonはOOPのdecoratorをサポートできるほか,直接文法階層からdecoratorをサポートする.Pythonのdecoratorは関数でもクラスでも実現できます.
decoratorは関数の機能を強化することができ、定義は少し複雑ですが、非常に柔軟で便利です.
関数呼び出しの前後に'begin call''end call'のログを印刷できるdecoratorを作成してください.@logのdecoratorを書いて、それをサポートできるかどうかを考えてみましょう.
@log def f(): pass 

また、以下をサポートします.
@log('execute') def f(): pass 

 
 1 #heelo.py
 2 __author__ = 'Administrator'
 3 import functools
 4 def log(text=None):
 5     def de(func):
 6         @functools.wraps(func)
 7         def first(*args,**kw):
 8             if text :
 9                 print "begin call",func.__name__,'input is ',text
10             else:
11                 print "begin call",func.__name__
12             rs= func(*args,**kw)
13             print 'end call'
14             return rs
15         return first
16 
17     return de
18 
19 @log()
20 def now():
21     print 'I\'m a boy '
22 
23 
24 now()
25 print now.__name__