me gusta subclase MutableSequence
, como recommended by Alex Martelli. Esto funciona bien para mí, particularmente cuando necesito agregar métodos personalizados en la parte superior de la lista que estoy construyendo.
from collections import MutableSequence
class MyList(MutableSequence):
"""A container for manipulating lists of hosts"""
def __init__(self, data=None):
"""Initialize the class"""
super(MyList, self).__init__()
if (data is not None):
self._list = list(data)
else:
self._list = list()
def __repr__(self):
return "<{0} {1}>".format(self.__class__.__name__, self._list)
def __len__(self):
"""List length"""
return len(self._list)
def __getitem__(self, ii):
"""Get a list item"""
return self._list[ii]
def __delitem__(self, ii):
"""Delete an item"""
del self._list[ii]
def __setitem__(self, ii, val):
# optional: self._acl_check(val)
self._list[ii] = val
def __str__(self):
return str(self._list)
def insert(self, ii, val):
# optional: self._acl_check(val)
self._list.insert(ii, val)
def append(self, val):
self.insert(len(self._list), val)
if __name__=='__main__':
foo = MyList([1,2,3,4,5])
foo.append(6)
print foo # <MyList [1, 2, 3, 4, 5, 6]>
¿Podría aclarar mejor sus requisitos? Si subclases cualquier clase iterable (list, dict, etc ...) debería funcionar sin problemas. Pero tal vez me estoy perdiendo algo? – mac
@mac: si subclasé una clase iterable, también me gustaría una forma de poder acceder al objeto de la lista subyacente para poder proporcionar funciones adicionales que actúen sobre él. No quiero un par clave-valor (dict), por lo que algo que emula una colección indexada (lista) sería suficiente. –