"6. 데코레이터"의 두 판 사이의 차이

(새 문서: == 개요 == decorator. 서비스를 만들 때 게시물을 보기 위해 로그인을 해야하는 경우 등에서 쓰인다. 다음과 같이 사용한다.<syntaxhighlight lang="...)
 
잔글
 
(같은 사용자의 중간 판 2개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 
== 개요 ==
 
== 개요 ==
 
decorator. 서비스를 만들 때 게시물을 보기 위해 로그인을 해야하는 경우 등에서 쓰인다.
 
decorator. 서비스를 만들 때 게시물을 보기 위해 로그인을 해야하는 경우 등에서 쓰인다.
 +
 +
함수를 수정하지 않고 추가기능을 넣고 싶을 때.
  
 
다음과 같이 사용한다.<syntaxhighlight lang="python">
 
다음과 같이 사용한다.<syntaxhighlight lang="python">
13번째 줄: 15번째 줄:
 
     print('게시물 보기.')
 
     print('게시물 보기.')
 
</syntaxhighlight>login함수에 들어가는 함수가 데코레이터 아래 있는 함수가 된다. 즉, 상위함수인 login에서 일련의 과정을 처리한 후 아래의 view를 login함수 안에서 다룬다.
 
</syntaxhighlight>login함수에 들어가는 함수가 데코레이터 아래 있는 함수가 된다. 즉, 상위함수인 login에서 일련의 과정을 처리한 후 아래의 view를 login함수 안에서 다룬다.
 +
 +
== 기초 사용법 ==
 +
{| class="wikitable"
 +
!의도
 +
!설명
 +
!방법
 +
|-
 +
|정의
 +
|함수 안에 함수를 넣는 방식으로 사용한다.
 +
|<syntaxhighlight lang="python">
 +
def 데코레이터이름(func):
 +
    def wrapper():
 +
        func.__name__  # 등의 속성을 이용하여 함수를 조작하는 등...
 +
        return 특정값
 +
    return wrapper
 +
</syntaxhighlight>
 +
|-
 +
|인수와 함께 정의
 +
|데코레이터가 꾸며줄 함수가 받는 인수를 데코레이터에서도 받고 싶을 때.
 +
|<syntaxhighlight lang="python">
 +
def 데코레이터이름(func):  # 기존 합수를 인수로 받는다.
 +
    def wrapper(*args, **kwargs):  # 데코레이터 역할. *args, **kwargs 매개변수 추가
 +
        func.__name__  # 등의 속성을 이용하여 함수를 조작하는 등...
 +
        func(*args)  # 받은 함수의 결과값을 조작할 수도 있다.
 +
        return 특정값
 +
    return wrapper
 +
</syntaxhighlight>
 +
|-
 +
|적용
 +
|@로 꾸며준다.
 +
여러개를 적용할 수도 있는데, 함수에서 가까운 데코레이터1부터 2 순으로 적용된다.
 +
|<syntaxhighlight lang="python">
 +
@데코레이터2(인수, ...)
 +
@데코레이터1(인수, ...)
 +
def 적용할함수(인수, ...)
 +
    ...
 +
    return ...
 +
</syntaxhighlight>
 +
|}
 +
 +
== 잘 안쓰는 방법 ==
 +
{| class="wikitable"
 +
!의도
 +
!설명
 +
!방법
 +
|-
 +
|상속
 +
|기존 데코레이터에 간단한 기능을 추가하여 사용하고 싶을 때.
 +
|
 +
|}
 
[[분류:기초]]
 
[[분류:기초]]

2023년 8월 4일 (금) 17:23 기준 최신판

1 개요편집

decorator. 서비스를 만들 때 게시물을 보기 위해 로그인을 해야하는 경우 등에서 쓰인다.

함수를 수정하지 않고 추가기능을 넣고 싶을 때.

다음과 같이 사용한다.

def login(function):
    def wrapper(뷰에들어갈인자):
        print('로그인!')
        function(뷰에들어갈인자)
    return wrapper
    
@login
def view(뷰에들어갈인자):
    print('게시물 보기.')

login함수에 들어가는 함수가 데코레이터 아래 있는 함수가 된다. 즉, 상위함수인 login에서 일련의 과정을 처리한 후 아래의 view를 login함수 안에서 다룬다.

2 기초 사용법편집

의도 설명 방법
정의 함수 안에 함수를 넣는 방식으로 사용한다.
def 데코레이터이름(func):
    def wrapper():
        func.__name__  # 등의 속성을 이용하여 함수를 조작하는 등...
        return 특정값
    return wrapper
인수와 함께 정의 데코레이터가 꾸며줄 함수가 받는 인수를 데코레이터에서도 받고 싶을 때.
def 데코레이터이름(func):   # 기존 합수를 인수로 받는다.
    def wrapper(*args, **kwargs):   # 데코레이터 역할. *args, **kwargs 매개변수 추가
        func.__name__  # 등의 속성을 이용하여 함수를 조작하는 등...
        func(*args)  # 받은 함수의 결과값을 조작할 수도 있다.
        return 특정값
    return wrapper
적용 @로 꾸며준다.

여러개를 적용할 수도 있는데, 함수에서 가까운 데코레이터1부터 2 순으로 적용된다.

@데코레이터2(인수, ...)
@데코레이터1(인수, ...)
def 적용할함수(인수, ...)
    ...
    return ...

3 잘 안쓰는 방법편집

의도 설명 방법
상속 기존 데코레이터에 간단한 기능을 추가하여 사용하고 싶을 때.