我想在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