Я хочу подражать нормальному списку python, кроме случаев, когда элементы добавляются или удаляются с помощью нарезки, я хочу "сохранить" список. Это возможно? Это была моя попытка, но она никогда не будет печатать "сохранение".
class InterceptedList(list):
def addSave(func):
def newfunc(self, *args):
func(self, *args)
print 'saving'
return newfunc
__setslice__ = addSave(list.__setslice__)
__delslice__ = addSave(list.__delslice__)
>>> l = InterceptedList()
>>> l.extend([1,2,3,4])
>>> l
[1, 2, 3, 4]
>>> l[3:] = [5] # note: 'saving' is not printed
>>> l
[1, 2, 3, 5]
Это работает для других методов, таких как append
и extend
, только для операций среза.
EDIT: Реальная проблема заключается в том, что я использую Jython, а не Python и забыл об этом. Комментарии по этому вопросу верны. Этот код отлично работает в Python (2.6). Однако код и ответы не работают в Jython.