我有一個包含多個列表的類,每當有東西添加到其中一個列表時,我需要觸發對實例狀態的更改。我在下面創建了一個簡單的演示課程,試圖展示我想要做的事情。在python中爲現有的內建類方法添加一個裝飾器
假如我有一類這樣的:
class MyClass:
added = False
def _decorator(self, f):
def func(item):
added = true
return f(item)
return func
def __init__(self):
self.list = [1, 2, 3]
self.list.append = self._decorator(self.list.append)
由於列表是內置的,我不能改變它的.append方法
cls = MyClass() #gives me an AttributeError since '.append' is readonly
理想情況下,我能做到以下幾點:
cls = MyClass()
cls.list.append(4)
cls.added #would be true
我該怎麼辦?子類list
是否允許我以這種方式改變它的行爲?如果是這樣,我將如何在不改變方法簽名的情況下通過班級的狀態?
謝謝!
謝謝,這應該適合我!我沒有看到的主要問題是如何傳入'parent_instance',但你的解決方案顯然覆蓋了這個。 –