On 27/01/2011 02:17, Chris wrote:
I have a class (A, for instance) that possesses a boolean (A.b, for
instance) that is liable to change over an instance's lifetime.

Many of the methods of this class (A.foo, for instance) should not
execute as long as this boolean is false, but should instead raise an
exception.

Can I use a decorator to implement this functionality?  More exactly,
could I define a function called 'checker' that accomplishes this:

def checker(f):
     ...

class A():

     b = True

     @checker
     def foo(self,...):
         print 'in foo'

a = A()
a.foo()
a.b = False
a.foo()

would result in:

'in foo'
Exception: ...

This exact solution isn't necessary, just something that doesn't
require me to have the clunky:

def foo(self,...):
     if self.b:
         ...
     else: raise Exception('b attribute must be true before executing
this method')

in every method.

How about this:

def checker(func):
    def wrapper(self, *args, **kwargs):
        if not self.b:
raise Exception('b attribute must be true before executing this method')
        return func(self, *args, **kwargs)
    return wrapper
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to