[learn] Python 3
# https://wandbox.org/permlink/imoBGl7tNgWngfaK
def do_twice(func):
print('call do_twice: {}'.format(func))
def wrap(*args, **kwargs):
func(*args, **kwargs)
func(*args, **kwargs)
return wrap
@do_twice
def start():
print('called start')
class A:
@do_twice
def end(self):
print('called end')
"""
関数は、import時。
メソッドは、インスタンス作成時。
にデコレートされる。
"""
a = A()
a.end()
"""
Start
call do_twice: <function start at 0x7f12634427b8>
call do_twice: <function A.end at 0x7f1263442950>
called end
called end
0
Finish
"""