[Python-es] Hackear objeto list

Oswaldo listas en soft-com.es
Sab Sep 17 12:19:45 CEST 2011


Hola,

Tengo un objeto 'list' que es creado por una librería externa sobre el 
que me gustaría modificar el método 'append'.

He probado lo siguiente:

- Crear mi propio objeto list y sustituirlo en la instancia de la 
libreria pero no se deja, produce 'TypeError: readonly attribute'

 >>> class modList(list):
...     def append(self, value):
...         super(CallbackList, self).append(value)
...         print "Append:", value
...
 >>> libr.lista = modList()
Traceback (most recent call last):
   File "<input>", line 1, in <module>
TypeError: readonly attribute

- He intentado modificar el metodo append de la lista pero siempre salta 
el error de que el atributo es 'read-only':

 >>> def appendHack(self, value):
...
...     list.append(self, value)
...     print "Append Value:", value
...
 >>> l = []
 >>> l.append = appendHack
Traceback (most recent call last):
   File "<input>", line 1, in <module>
AttributeError: 'list' object attribute 'append' is read-only

 >>> l.append = appendHack.__get__(l)
Traceback (most recent call last):
   File "<input>", line 1, in <module>
AttributeError: 'list' object attribute 'append' is read-only


¿Conocéis alguna forma de modificar el método append de una lista sin 
hacer una derivación?

Gracias,

-- 
Oswaldo


Más información sobre la lista de distribución Python-es