Python ์๋ ํจ์๋ฅผ ๊พธ๋ฉฐ์ค ์ ์๋ decorator๋ผ๋ ๊ธฐ๋ฅ์ด ์กด์ฌํ๋ค.
Decorator์ @ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ, ํจ์์ ์๊ณผ ๋ค์ ์ถ๊ฐ์ ์ธ ๋ด์ฉ์ ๋ํด์ค๋ค.
์ฒ์์ ๋ดค์ ๋ @๊ฐ ๋ญ๊ฐ ์ถ์ด์ Python @๋ผ๊ณ ๊ฒ์ํ๋๋ ๊ฒ์๊ฒฐ๊ณผ๊ฐ ์๋์์ ๋นํฉํ๋ค..
1) nested function์ ํํ์, 2) decorator class ๋ ๊ฐ์ง ํํ๋ก ์ฌ์ฉํ ์ ์๋ค.
1) nested function
- decorator ํจ์๋ฅผ ์ ์ํด์ค๋ค (test_decorator).
- decorator ํจ์๋ input์ผ๋ก ํจ์๋ฅผ ๋ฐ๊ณ , ์๋ค๋ก ์ทจํด์ค action์ ์ ์ํ ํ ํด๋น ํจ์๋ฅผ ํธ์ถํด ์ฃผ๋ฉด ๋๋ค.
- decorator์ ์ฌ์ฉํ ํจ์๋ฅผ ์ ์ํ๊ธฐ ์ decorator ๊ธฐํธ @์ ํจ๊ป decorator ํจ์์ ์ด๋ฆ์ ์ ์ด ์ฃผ๋ฉด ๋๋ค.
def test_decorator(func):
def wrapper(*args, **kwargs):
print('---function starts---')
func(*args, **kwargs)
print('---function ends---')
return wrapper
@test_decorator
def example_f(input_str):
print(input_str)
example_f('hello')
>> ---function starts---
hello
---function ends---
2) decorator class
- decorator class๋ฅผ ์ ์ํด์ค๋ค (Test_decorator).
- __init__()์์ input์ผ๋ก ํจ์๋ฅผ ๋ฐ๊ณ ,
- __call__()์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ทจํด์ค action์ ์ ์ํ ํ ํด๋น ํจ์๋ฅผ ํธ์ถํด ์ฃผ๋ฉด ๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก decorator์ ์ฌ์ฉํ ํจ์ ์์ @ ๊ธฐํธ์ ํจ๊ป decorator class ์ด๋ฆ์ ์ ์ด ์ฃผ๋ฉด ๊ฐ์ ์์ฉ์ ํ๋ค.
class Test_decorator:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print('---function starts---')
func(*args, **kwargs)
print('---function ends---')
@Test_decorator
def example_f(input_str):
print(input_str)
example_f('hello')
>> ---function starts---
hello
---function ends---
'๐ Python & library > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Python print ์ต์ 'sep' (0) | 2021.11.29 |
---|---|
Python์ผ๋ก PyTorch, Tensorflow, Python, CUDA, cudnn ๋ฒ์ ํ์ธ (0) | 2021.08.19 |
Python function annotation (ํจ์ ์ฃผ์) (0) | 2021.08.04 |
Python memory status, ๋ฉ๋ชจ๋ฆฌ ์ ์ ์จ ํ์ธ (0) | 2021.08.04 |