2017년 3월 15일 수요일

[python] Decorator

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__()

댓글 없음:

댓글 쓰기