Правильный способ расширить списокPython

Программы на Python
Anonymous
Правильный способ расширить список

Сообщение Anonymous »

Я хочу расширить функциональность класса «список» и добавить собственные обработчики событий: «Добавить новый элемент в список» и «Удалить элемент из списка». Для этой задачи я не хочу использовать композицию, лучше использовать наследование.
Я попробовал:

Код: Выделить всё

class ExtendedList(list):

def append(self, obj):
super(ExtendedList, self).append(obj)
print('Added new item')

def extend(self, collection):
if (hasattr(collection, '__iter__') or hasattr(collection, '__getitem__')) and len(collection)>0:
for item in collection:
self.append(item)

def insert(self, index, obj):
super(ExtendedList, self).insert(index, obj)
print('Added new item')

def remove(self, value):
super(ExtendedList, self).remove(value)
print('Item removed')
но это работает неправильно. Я не могу уловить все события добавления и удаления. Например:

Код: Выделить всё

collection = ExtendedList()
collection.append('First item')
# Out: "Added new item\n"; collection now is: ['First item']
collection.extend(['Second item', 'Third item'])
# Out: "Added new item\nAdded new item\n"; collection now is: ['First item', 'Second item', 'Third item']
collection += ['Four item']
# Doesn't output anything; collection now is: ['First item', 'Second item', 'Third item', 'Four item']
collection.remove('First item')
# Out: "Item removed\n"; collection now is: ['Second item', 'Third item', 'Four item']
del collection[0:2]
# Doesn't output anything; collection now is: ['Four item']
collection *= 3
# Doesn't output anything; collection now is: ['Four item', 'Four item', 'Four item']
Как правильно расширить «список» классов в моей ситуации?

Подробнее здесь: https://stackoverflow.com/questions/211 ... xtend-list

Вернуться в «Python»