파이썬에는 패키지로 나오는 라이브러리를 살펴보면 아래와 같이 쓰인 코드(@final, @property)가 흔히 보인다.
@final
class struct_time(structseq[Any | int], _TimeTuple):
if sys.version_info >= (3, 10):
__match_args__: Final = ("tm_year", "tm_mon", "tm_mday", "tm_hour", "tm_min", "tm_sec", "tm_wday", "tm_yday", "tm_isdst")
@property
def tm_year(self) -> int: ...
@property
def tm_mon(self) -> int: ...
@property
def tm_mday(self) -> int: ...
''' __________ (생략) __________ '''
@final, @property 가 뭔지 따라가보니 아래와 같은 메서드랑 클래스가 나왔다...
def final(f: _T) -> _T: ...
class property: ...
그리고 검색해보니 이게 "데코레이터"라는데, "@메서드"에 데코레이터 메서드를 작성하고, 내가 사용할 메서드 작성할때 위에 "@메서드"를 적어서 적용한다.
생명주기
데코레이터 메서드(매개변수에 사용할 메서드가 들어가서) 실행 > 내가 사용할 메서드 실행 > 내가 사용할 메서드 종료 > 데코레이터 메서드 종료
파이썬 코드 예제
from datetime import datetime, timedelta
from time import time, sleep
from logging import basicConfig as config
import logging
config(
#filename='application.log',
level=logging.DEBUG,
format='%(asctime)s:%(levelname)s:%(message)s'
)
def print_start_end_time(func):
def middle(*args, **kwargs):
now = time()
logging.info(f"{func.__name__}.sleep({kwargs['sleep_time']})")
sleep(kwargs['sleep_time'])
if func.__name__ in ['run']:
result = func()
else:
result = func(*args, **kwargs)
logging.info(f"========== [func: {func.__name__}] END work {time() - now:.4f} sec ==========")
return result
return middle
@print_start_end_time
def run():
logging.info('run.process run')
run(sleep_time=0.5)
그 외
@property 를 통해 변수를 불러오고,
@변수명.setter 를 통해 변수 값 변경을 지정하여 변수 관리 가능
'기타 (Other)' 카테고리의 다른 글
아파치 카프카 (0) | 2025.01.21 |
---|---|
[python] pandas (4) | 2025.01.09 |
[python] logging (0) | 2024.12.07 |
[python] Flask 기본 통신 예제 (0) | 2024.11.09 |
[python] MQTT 예제 (0) | 2024.09.22 |