我想在Python中实现decorator pattern,我想知道是否有办法编写一个装饰器来实现它想要修改的功能,而无需为所有的函数只是被转发到装饰对象。像这样:在Python中实现装饰器模式
class foo(object):
def f1(self):
print "original f1"
def f2(self):
print "original f2"
class foo_decorator(object):
def __init__(self, decoratee):
self._decoratee = decoratee
def f1(self):
print "decorated f1"
self._decoratee.f1()
def f2(self): # I would like to leave that part out
self._decoratee.f2()
我想有转发给decoratee.f2
自动foo_decorator.f2
电话。有没有办法编写一个将所有未实现函数调用转发到decoratee
的泛型方法?
你可以举一个简单的子类化不会起作用的例子吗?你也可以动态地进行子类化 - 这种模式看起来像是一种解决不了那些不支持多重继承的语言的解决方法。 – 2010-06-25 15:26:45
我想在运行时装饰对象。我想将不同的装饰器应用于一个对象,并能够再次移除它们。子类创建后不能更改它,或者它可以吗? – 2010-06-25 15:50:55
如果你有类'A'并改变'A',即增加一个新方法,'A.foo = lambda self:self',这将反映在A ..的所有实例上,因为* everything *是在运行时确定的。伟大的方式来产生绝对不可维护的代码。 – 2010-06-25 17:01:02