Asignando un atributo por nombre

Samuel smonux en telefonica.net
Mar Dic 23 12:30:12 CET 2003


Pablo Barrera González wrote:

>Hola a todos
>
>Llevo un par de días intentando hacer una cosa que al principio pensaba
>que era fácil pero ahora no sé si se puede hacer.
>
>Tengo una serie de instancias que correrán en unos cuantos hilos. Uso
>cerrojos y condiciones para evitar que los datos se modifiquen mal. Lo
>que quiero es cambiar los atributos de una clase cerrando el cerrojo
>desde dentro de la clase y no desde el resto del programa, para
>simplificar lo demás. Lo que se me ha ocurrido es definir unos métodos
>como estos:
>
>def get(self, name):
>	return eval("self.%s")
>def set(self,name, value):
>	eval("self.%s = %s", name, value)
>
>El get funciona bien, pero con el set se queja ya que no puedo poner el
>igual dentro de la expresión a evaluar por eval. 
>
>He estado buscando otras opciones, como conseguir una referencia del
>atributo que quiero cambiar pero no he tenido suerte. ¿Alguna idea? 
>
>Muchas gracias
>
>Pablo Barrera
>  
>

Hola,
si te he entendido bien, quieres proteger el acceso a una variable de 
forma "transparente". Creo
que esta entrada de la FAQ de Python es lo que necesitas:
http://www.python.org/doc/faq/programming.html#what-is-delegation

Es básicamente lo que intentabas hacer, pero accediendo a los datos a 
través del diccionario:

self.__dict__[name] = value

Otra opción es usar property:
http://www.python.org/2.2/descrintro.html#property

Espero haber entendido lo que que querías, y que te sirva.

Saludos

Samuel


------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


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