참고 : Python Decorators II: Decorator Arguments
Python decorator 예제
@fixme# -*- coding: utf-8 -*-
import warning
def fixme(func, *args, **kwargs):
def new_func(func, self, *args):
warning.warn("func.__name__" + args[0]
@sync_hitcount : decorator 에 param 이 없는 경우
def sync_hitcount(func):
"""
Decorator sync_hitcount
decorator to lock the Remittance update to synchronization
"""
def lock(token):
"""
_lock is needed during determinination of the remit status.
Without it, status could not determined appropriately.
"""
ret = Remittance.objects.updateHitCount(token)
if ret['status'] == Remittance.STATUS['done_remit']:
raise ExpiredRemitException("remit has been done")
if ret['hit_count'] > 1:
raise RemitIsLockedException("on remitting")
def unlock(remitInfo):
# init hit_count
remitInfo.hit_count = 0
remitInfo.save()
def dec(*args, **kwargs):
try:
lock(kwargs['token'])
func(*args, **kwargs)
finally:
unlock(kwargs['remitInfo'])
return
return dec
@iframe : : decorator 에 param 이 있는 경우
def iframe(iframe_param):
def dec(func):
def dec_dec(*args, **kwargs):
func(*args, **kwargs)
return
return dec_dec
return dec
@iframe : : decorator 에 param 이 있는 경우, class method 에 적용하는 경우
def decorator(iframe_param):
def dec(func):
def dec_dec(self, *args, **kwargs):
func(self, *args, **kwargs)
return
return dec_dec
return dec
댓글 없음:
댓글 쓰기