티스토리 뷰

python lecture/basic

[edu] decoraotr 인자 받기

burningrizen 2019. 1. 9. 13:50


클래스 데코레이터 인자값 받기

from functools import wraps


class Decorator:
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs

def __call__(self, func):
@wraps(func)
def wrapper(*args, **kwargs):
print("start decorator", self.args, self.kwargs)
return func(*args, *kwargs)
return wrapper


class Cls:
def __init__(self):
pass

@Decorator(1, 2, 3, age="20", name="kim")
def foo(self):
print("start foo")
return -1


@Decorator(1, 2, 3, age="20", name="kim")
def foo():
print("start foo")
return -1


c = Cls()
print(c.foo())
print(foo())


한 클래스 안에서 구현

class Cls:
class Decorator:
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs

def __call__(self, func):
@wraps(func)
def wrapper(*args, **kwargs):
print("start decorator", self.args, self.kwargs)
return func(*args, *kwargs)

return wrapper

def __init__(self):
pass

@Decorator(1, 2, 3, age="20", name="kim")
def foo(self):
print("start foo")
return -1


c = Cls()
print(c.foo())




데코레이터 인자값 받기

def get_delay(tp):
def decorator(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
r = func(*args, **kwargs)
print("{}(): delay={}".format(func.__name__, tp(time.time()-start)))
return r
return wrapper
return decorator


def is_prime(n):
for i in range(2, n):
if not n % i:
return False
return True


@get_delay(float)
def count_prime(n):
c = 0
for i in range(2, n+1):
if is_prime(i):
c += 1
return c


print(count_prime(10000))


'python lecture > basic' 카테고리의 다른 글

[edu] 쓰레드 리턴값 얻기  (0) 2019.01.14
[edu] decorator 메소드 속성 유지  (0) 2019.01.09
[edu] function (함수)  (0) 2019.01.08
[edu] Inheritance (상속, 오버라이딩)  (0) 2018.12.23
[edu] 2진 탐색  (0) 2018.12.12
댓글