http://trowind.tistory.com/72
함수버전
def verbose(func):
print "Begin", func.__name__;
func();
print "End", func.__name__;
@verbose
def my_function():
print "hello, world."
my_functiont() 시
실제로는
verbose(my_function)
이 실행된다.
-----------------------
클래스버전
class Verbose:
def __init__(self, f):
print "Initializing Verbose."
self.tt = f;
def __call__(self):
print "Begin", self.tt.__name__
self.tt();
print "End", self.tt.__name__
@Verbose
def my_function():
print "hello, world."
print "Program start"
my_function();
먼저 클래스의 __init__은 f라는 함수를 받는다.
그리고 __call__이란 부분이 데코레이터시 실행되는 부분이다 .
이건 실제로는
my_funtion() 을 실행시 Verbose.__call__(my_function) 이 실행된다.
즉 실제로는 아래와 같이 실행된다.
class Verbose:
def __init__(self, f):
print "Initializing Verbose."
self.tt = f;
def __call__(self):
print "Begin", self.tt.__name__
self.tt();
print "End", self.tt.__name__
def my_function():
print "hello, world."
print "Program start"
ver = Verbose(my_function)
ver.__call__()
댓글 없음:
댓글 쓰기