我試圖編寫一個像@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