250x250
반응형
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
- airflow subdag
- 상관관계
- subdag
- integrated gradient
- TensorFlow
- 유튜브 API
- GCP
- gather_nd
- requests
- spark udf
- tensorflow text
- XAI
- session 유지
- flask
- correlation
- Airflow
- login crawling
- 공분산
- UDF
- API Gateway
- hadoop
- Counterfactual Explanations
- grad-cam
- GenericGBQException
- chatGPT
- BigQuery
- youtube data
- top_k
- API
- Retry
Archives
- Today
- Total
데이터과학 삼학년
클래스를 이용하여 데커레이터 만들기 본문
반응형
클래스로 데코레이터를 만드는 방법
클래스를 활용할 때는 인스턴스를 함수처럼 호출하게 해주는 __call__ 메서드를 이용하여 구현
class Trace:
def __init__(self, func): # 호출할 함수를 인스턴스의 초깃값으로 받음
self.func = func # 호출할 함수를 속성 func에 저장
def __call__(self):
print(self.func.__name__, '함수 시작') # __name__으로 함수 이름 출력
self.func() # 속성 func에 저장된 함수를 호출
print(self.func.__name__, '함수 끝')
@Trace # @데코레이터
def hello():
print('hello')
hello() # 함수를 그대로 호출
#======
hello 함수 시작
hello
hello 함수 끝
클래스의 인스턴스 자체를 호출할때 실행시키는 __call__ 메서드를 테커레이터로 이용하면 된다
클래스로 파라미터를 받을 수 있는 데커레이터 생성
class IsMultiple:
def __init__(self, x): # 데코레이터가 사용할 매개변수를 초깃값으로 받음
self.x = x # 매개변수를 속성 x에 저장
def __call__(self, func): # 호출할 함수를 매개변수로 받음
def wrapper(a, b): # 호출할 함수의 매개변수와 똑같이 지정(가변 인수로 작성해도 됨)
r = func(a, b) # func를 호출하고 반환값을 변수에 저장
if r % self.x == 0: # func의 반환값이 self.x의 배수인지 확인
print('{0}의 반환값은 {1}의 배수입니다.'.format(func.__name__, self.x))
else:
print('{0}의 반환값은 {1}의 배수가 아닙니다.'.format(func.__name__, self.x))
return r # func의 반환값을 반환
return wrapper # wrapper 함수 반환
@IsMultiple(3) # 데코레이터(인수)
def add(a, b):
return a + b
print(add(10, 20))
print(add(2, 5))
#=====
add의 반환값은 3의 배수입니다.
30
add의 반환값은 3의 배수가 아닙니다.
7
데커레이터를 클래스로 만들어 클래스의 인스턴스 값을 파라미터로 받아 속성을 가지고 감
wrapper function안에서 해당 속성을 이용해 데커레이터에서 받은 파라미터가 action을 취할 수 있도록 구성
출처 : dojang.io/mod/page/view.php?id=2431
728x90
반응형
LIST
'Python' 카테고리의 다른 글
First-class function (일급함수) (0) | 2021.09.15 |
---|---|
f-string escape string (중괄호를 나오게 하려면) (0) | 2021.06.17 |
데커레이터 다수 지정할때 실행 순서?! (0) | 2021.04.15 |
정규 표현식 기초 (퍼옴) (0) | 2021.03.23 |
코루틴 (coroutine) 정리 (1) | 2021.01.01 |
Comments