[Python] decorator

2023. 9. 21. 17:48

# 데코레이터

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

+ Recent posts