Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #47933
| Newsgroups | comp.lang.python |
|---|---|
| Date | 2013-06-13 03:40 -0700 |
| Message-ID | <e84043fc-9c4e-46a9-b7a1-8c136a4fbdf6@googlegroups.com> (permalink) |
| Subject | How to pass instance into decorator function |
| From | Jayakrishnan Damodaran <jakyjk05@gmail.com> |
I have a class which calculates some salary allowances. Instead of a blind calculation I need to check some conditions before I can return the calculated amount. Like if all the allowances calculated till now plus the one in progress must not exceed the total salary(this may occur since these allowances are a percentage of basic pay). Below is a sample code FYI
class CompanySalaryBreakUpRule(object):
'''Class to calculate the various salary components.
This class is inherited by individual company classes whom implement salary calculations.
Various component calculations are implemented as @property and hence be accessed as class properties.
'''
grossPay = 0.0
remainingAmount = 0.0
def checkValid(self, func):
from functools import wraps
@wraps(func)
def wrapper(self, *args, **kwargs):
allowanceToCheck = func(self, *args, **kwargs)
if allowanceToCheck > self.remainingAmount:
allowanceToCheck = self.remainingAmount
else:
self.remainingAmount = self.remainingAmount - allowanceToCheck
return allowanceToCheck
return wrapper
@property
@checkValid
def dearnessAllowance(self):
return self.basic * 0.2 # we have a function that calculates basic pay
But executing this raises an exception
@checkValid
TypeError: checkValid() takes exactly 2 arguments (0 given)
Back to comp.lang.python | Previous | Next — Next in thread | Find similar | Unroll thread
How to pass instance into decorator function Jayakrishnan Damodaran <jakyjk05@gmail.com> - 2013-06-13 03:40 -0700 Re: How to pass instance into decorator function Peter Otten <__peter__@web.de> - 2013-06-13 13:26 +0200
csiph-web