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)
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to