我试图编写一个像@property一样工作的装饰器,但遇到了一些问题。在Python 2.7中定义“属性”类装饰器
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)
它是一个简单的链接装饰器。 @property/@。setter语法正是我想要克隆的。
这工作:
@withbefore
def foo():
...
@foo.before
def beforefoo():
...
但在一个类就不会:
class Weee(object):
@withbefore
def do_stuff(self):
pass
@do_stuff.before
def before_do_stuff(self):
pass
它提出了一个导入错误。如何正确模拟@property /。{setter,getter,deleter}?如何正确模拟@property /。{setter,getter,deleter}?
为什么''之前'实际上是一个属性? – poke