単純にデコレータを理解する為のサンプルで、
AOPを書く方法という観点のサンプル
メソッドをラップするという点を忘れない為のサンプル
def query(param1, param2=None): res = [1, 2, 3] def _wrap1(function): def _wrap2(*args, **kwargs): print('前処理:decorate parameter {} {}'.format(param1, param2)) print('前処理:args = {}'.format(args)) print('前処理:kwargs = {}'.format(kwargs)) i = function(*args, **kwargs) print('後処理:{}'.format(i)) res.append(i) return res return _wrap2 return _wrap1 @query(param1='a', param2='b') def foo(x, y=None): print('foo') print(x) print(y) return 4 r = foo(12) print('r = %s' % r)
結果
前処理:decorate parameter a b 前処理:args = (12,) 前処理:kwargs = {} foo 12 None 後処理:4 r = [1, 2, 3, 4]