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__