I'm trying to write a decorator that works like @property, but running into some problems.
class Dec(object):
def __init__(self, fn):
self._fn = fn
self._before = None
@property
def before(self)
return self._before
@before.setter
def before(self, fn):
self._before = fn
def __call__(self, *args, **kwargs):
self._before(*args, **kwargs)
self._fn(*args, **kwargs)
def withbefore(fn):
return Dec(fn)
Its a simple chaining decorator. The @property/@.setter syntax is exactly what I'm trying to clone.
This works:
@withbefore
def foo():
...
@foo.before
def beforefoo():
...
But on a class it doesn't:
class Weee(object):
@withbefore
def do_stuff(self):
pass
@do_stuff.before
def before_do_stuff(self):
pass
It raises an import error.
TypeError: 'NoneType' object is not callable
How can i correctly emulate @property/.{setter,getter,deleter} ?