Decorator question
Thomas L. Shinnick
tshinnic at io.com
Wed Jan 26 21:42:04 EST 2011
At 08:17 PM 1/26/2011, 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:
Mark Summerfield's book "Programming in Python 3" has an example
something like this (p.357) called 'positive_result'. I hesitate to
quote the entire thing, so I'll quote only the inner 'half' of the decorator:
def wrapper(*args, **kwargs):
result = function(*args, **kwargs)
assert result >= 0, function.__name__ + "() result isn't >= 0"
return result
I would guess you would have to count on the first item in the
methods' args to be self, and use that to test whether your attribute
is false/true?
Mark?
>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.
>
>Thanks,
>
>Chris
>--
More information about the Python-list
mailing list