728x90
반응형
decorator 패턴은 '@'표기를 사용해 함수 또는 메서드의 변환을 우아하게 지정해준다
'함수의 객체'와 '함수를 변경하는 다른 객체'의 wrapping을 허용한다
@deco
def method(arg):
# method...
pass
decorator 를 사용한 위 코드는 아래코드와 같다
def method(arg):
# method...
pass
method = deco(method)
import functools
import time
line_len = 80
def clen(s):
"""Calculate the effective length of a string considering full-width characters."""
return sum(1 if ord(c) >= 0x2E80 else 0 for c in s)
def print_time_func(func):
@functools.wraps(func)
def wrapper(*args, **kargs):
st = time.time()
class_name = "클래스"
if args and hasattr(args[0], "__class__"):
class_name = args[0].__class__.__name__
s_str = f"{class_name}.{func.__name__} 시작"
print(s_str.center(line_len-clen(s_str), "_"))
res = func(*args, **kwargs)
e_str = f"{class_name}.{func.__name__} 종료: {time.time()-st:.3f}"
print(e_str.center(line_len-clen(e_str), "_"))
return res
return wrapper
@print_time_func
def method():
# method...
print('[method]')
pass
>>> method()
-----------------------클래스.method 시작-----------------------
[method]
-------------------클래스.method 종료: 0.000--------------------
728x90
728x90
BIG
'Programming > Python' 카테고리의 다른 글
python 으로 asdict, from_dict 직접 구현 (0) | 2023.12.18 |
---|---|
docker compose - python default 컨테이너 만들기 (0) | 2023.04.05 |
try except를 깔끔하게 사용하기 - suppress (0) | 2023.01.31 |
datetime, str, timestamp 변환 (0) | 2021.01.13 |
NamedTuple 초기화 이후 수정하는 방법 (0) | 2020.12.11 |
댓글