# 데코레이터
def decorator_func(original_func):
def wrapper_func(*args, **kwargs): # 가변 파라미터를 넣어준다. 파라미터의 갯수가 몇개인지 알 수 없을 때! 연속적인 파라미터를 받을 수 있다.
print("{} 함수가 실행되기 전 실행되는 문구".format(original_func.__name__))
return original_func(*args, **kwargs) # 실행한 뒤의 결과값을 출력해야함
return wrapper_func # 실행되지 않은 function 그대로를 출력해야함.
@decorator_func # annotation
def display_1():
# 앞에 실행되는 로직
print("display_1 함수가 실행되었습니다.")
# 뒤에 실행되는 로직
@decorator_func
def display_2():
print("display_2 함수가 실행되었습니다.")
@decorator_func
def display_3(name, age):
print("display_3 함수가 실행되었다. {}, {}".format(name, age))
display_1()
display_2()
display_3("철수", 30)
print("====================================================")
def decorator_func(original_func):
def wrapper_func():
print("{} 함수가 실행되기 전 실행되는 문구".format(original_func.__name__)) # 전처리
val = original_func()
print("{} 함수가 실행되기 후 실행되는 문구".format(original_func.__name__)) # 후처리
return val if bool(val) else None
return wrapper_func # 함수 속 함수인 wraapper_fucn을 여기서 선언
@decorator_func # annotation
def display_1():
print("display_1 함수가 실행되었습니다.")
display_1()
# @decorator_func
# def display_2():
# print("display_2 함수가 실행되었습니다.")
#
# display_2()
# 데코레이터 클래스 방식
class DecoratorClass:
def __init__(self, original_func):
self.original_func = original_func
# 내장함수 사용
def __call__(self, *args, **kwargs):
print("메서드가 호출되기 전 실행되는 문장".format(self.original_func.__name__)) # 전처리
a = self.original_func(*args, **kwargs)
print("메서드가 호출되기 후 실행되는 문장".format(self.original_func.__name__)) # 전처리
return a
@DecoratorClass # 클래스명이 annotaion이다.
def display_1(name, age):
print("display1 함수가 실행되었습니다.")
a = display_1("ddd", 111)
print(a)
# @DecoratorClass
# def display_2(name, age):
# print("display2 함수가 실행되었습니다. {} {} ".format(name, age))
# display_2("jajaj", 1234)
'언어 > Python' 카테고리의 다른 글
python (0) | 2023.09.22 |
---|---|
[Python] property 예제 (0) | 2023.09.21 |
[Python] del 예제 (0) | 2023.09.21 |
[Python] init 예제 (0) | 2023.09.21 |
[Python] 클래스 - 접근제어 예제 (0) | 2023.09.21 |