Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #47933

How to pass instance into decorator function

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>

Show all headers | View raw


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 | NextNext in thread | Find similar | Unroll thread


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