[Python-es] Hackear objeto list

Andrey Antoukh andsux en gmail.com
Dom Sep 18 12:20:36 CEST 2011


This module is available for backward compatibility only. If you are
writing code that does not need to work with versions of Python
earlier than Python 2.2, please consider subclassing directly from the
built-in list type.

Por lo que la mejor manera es hacer subclase.

Luego, ver lo que hace y como lo hace la biblioteca esa, el uso de
listas, si tiene su propia implementacion, es facilmente solucionable
con monky patching. Si hace uso de la lista nativa de python,
dependiendo de como inicializa tambien puede que tengas suerte.

Sin mas datos, creo que nadie va a poder darte una solucion aceptable...

Andrei.

El día 18 de septiembre de 2011 00:31, Nekmo <contacto en nekmo.com> escribió:
> Para este tipo de cosas está la clase UserList:
> http://docs.python.org/library/userdict.html?highlight=userlist#UserList.UserList
>
> La cual para compatibilidad con Python 3.x, yo importo así:
> import sys
> if sys.version_info < (3,0):
>    from UserDict import UserDict
>    from UserList import UserList
> else:
>    from collections import UserDict, UserList
>
> Un cordial saludo:
> -- Nekmo.
>
> Sitio web: http://nekmo.com
> Dirección de contacto: contacto en nekmo.com
> XMPP/Jabber: contacto en nekmo.com
> Identi.ca: http://identi.ca/nekmo
> Diaspora: Nekmo
> Google+: Nekmo Com
>
>
>
> El día 17 de septiembre de 2011 21:48, Jose Caballero
> <jcaballero.hep en gmail.com> escribió:
>>
>>
>> El 17 de septiembre de 2011 14:47, Oswaldo <listas en soft-com.es> escribió:
>>>
>>> El 17/09/2011 20:20, Jose Caballero escribió:
>>>>
>>>>
>>>> El 17 de septiembre de 2011 06:19, Oswaldo <listas en soft-com.es
>>>> <mailto:listas en soft-com.es>> escribió:
>>>>
>>>>    Hola,
>>>>
>>>>    Tengo un objeto 'list' que es creado por una librería externa sobre
>>>>    el que me gustaría modificar el método 'append'.
>>>>
>>>>
>>>>
>>>>
>>>> class List(list):
>>>>         def append(self, value):
>>>>                 super(List, self).append(value)
>>>>                 print 'append ', value
>>>>
>>>>
>>>
>>> Gracias por responder, pero como ya comentaba esta solución no me vale ya
>>> que al intentar sustituir la lista original con una instancia de esta clase
>>> genera un error:
>>>
>>> L = List()
>>> >>> libr.lista = L
>>> Traceback (most recent call last):
>>>  File "<input>", line 1, in <module>
>>> TypeError: readonly attribute
>>>
>>
>>
>>
>> quizas si nos muestras el codigo de libr podemos ayudar mejor.
>> Tienes sobreescrito __setattr__?
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
http://twitter.com/andsux
http://www.niwi.be
****
http://www.freebsd.org/
http://www.postgresql.org/
http://www.python.org/
http://www.djangoproject.com/

"Linux is for people who hate Windows, BSD is for people who love UNIX"
"Social Engineer -> Because there is no patch for human stupidity"


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