반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- v-html
- webpack
- ES6
- express
- TypeScript
- 자바스크립트
- CSS
- MySQL
- vuex
- App.vue
- JavaScript
- react
- Wecode
- nodejs
- Vue transition
- State
- Vue
- HOC
- sass
- Vue.js
- 리액트
- event
- 쉬운설명
- jsx
- scss
- 댓글달기
- storybook
- mapGetters
- 자료구조
- input
Archives
- Today
- Total
익명의 개발노트
[decorator] 데코레이터 개념 본문
반응형
1. 정의 : decorator
1) 어떤 함수를 실행하기 전에 강제로 먼저 실행해주는 함수.
2) 표현법은 @함수명 으로 표기한다.
3) 데코레이터를 정의하는 함수의 내부는 클로져로 작성되어 있다.
2. 기본적인 패턴
1) 데코레이터를 붙일 함수를 인자값으로 받는다.
2) 가장 기본적인 패턴은 아래와 같다.
def name_decorator(func) :
def inner(*args,**args):
#함수에 추가할 기능
func()
...
return inner
@name_decorator
def greeting():
return "hello"
위의 name_decorator가 내부 inner의 리턴값을 받고 greeting() 함수가 실행될 경우 먼저 실행되게 된다.
만약 데코레이터에 인자값(ex) 문자, 숫자 등등) 이 있을경우 어떻게 처리해야하나??
def name_decorator(name) :
def inner(func):
return func() + name
return inner
@name_decorator("정우성")
def greeting():
return "Hello, "
TypeError: 'str' object is not callable
데코레이터 인자값이 string 타입을 받을 경우, 나는 먼저 stirng을 받고 내부값을 func으로 받는 줄 알았다.
하지만 결과는 계속 str 타입을 불러올 수 없다는 메세지일 뿐..
이런 경우 string값을 인자값으로 받고, func을 받으면 된다.
한 단계만 더 고려해주면된다.
기본 패턴은 func받고 inner에서 모든 인자받는 것으로 되어있다.
따라서, 가장 바깥에서 인자값을 받고, 내부는 기존 패턴대로 작성하되, 중간에 추가한 함수(decorator)에 대한 리턴 값을 반드시 설정해주어야 한다.
def name_decorator(name) :
def decorator(func):
def inner(*args, **kwd): #모든 인자 받음/
return func() + name
return inner
return decorator
@name_decorator("정우성")
def greeting():
return "Hello, "
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[list] 관련 함수 (0) | 2019.06.13 |
---|---|
[dictonary] 관련 함수 (0) | 2019.06.13 |
[modules, path] (0) | 2019.06.13 |
[Function paramters] (0) | 2019.06.12 |
자바스크립트와 파이썬 문법 다른점. (0) | 2019.05.30 |
Comments