quizas si nos muestras el codigo de libr podemos ayudar mejor.

Jose, Nekmo, Andrey, intento explicarme mejor:

La libreria en cuestion es un archivo .pyd escrito en C, aunque el codigo fuente esta disponible preferiría no tocarlo.

Esta libreria tiene una propidad 'notices' que es un objeto 'list'

>>> type(libr.notices)
<type 'list'>

El funcionamiento de esta propiedad es el siguiente:

Al ejecutar un método de la libreria esta genera una serie de mensajes que almacena en la lista 'libr.notices'. Una vez finalizado la ejecución del método puedo consultar la lista para ver los mensajes generados.

Como la ejecución de este métido puede ser pesada me interesa interceptar esos mensajes en el momento en el que la libreria los agrega a la lista 'notices' sin necesidad de esperar a que finalice la ejecución.

El problema es que al intentar sustituir el objeto lista original de la libreria con el mio modificado siempre me encuentro con el error 'readonly attribute'

>>> libr.notices = mylist
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: readonly attribute

>>> setattr(libr, "notices", mylist)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: readonly attribute

Como segunda opción, ya que no puedo sustituir la lista por mi lista personalizada, era modificar el método append en la propia lista original, pero el tipo lista tampoco deja reemplazar el metodo append. Se puede comprobar con una lista normal:

>>> def myAppend(self, value):
...     print "myappend", value
...     list.append(self, value)

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

La pregunta es: ¿hay alguna forma de saltarse esa restricción 'read-only'?

Saludos,

--
Oswaldo
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a