El día 16 de agosto de 2011 05:54, Alvaro Manrique <sanreikaj.fo...@gmail.com> escribió: > Gracias por la respuesta, voy a ver como lo puedo manejar en base a tu > respuesta y lo expongo aqui, > sin embargo para quien pueda apoyarme con mas información, esta clase esta > diseñada de esta manera, > sencilla y no debe tener metodos, ya que esta es una de las capas para la > abstractación de de la base de datos, > que forma parte de la capa de negocio del sistema en desarrollo. > > Esta clase corresponde a una tabla en la db y cada miembro es un campo, de > alli es el porque de que cada miembro > es una instancia de una clase base.
Tal como lo comentas, trabajando directamente con los atributos de clase NO vas a poder evitar que una asignación "machaque" el atributo de clase. Aunque es algo complicado, he intentado explicarlo este motivo en los artículos sobre "descriptores" que estoy escribiendo en mi blog: http://ch3m4.org/blog/tag/descriptor/ Para hacer lo que pretendes debes subir un nivel de abstracción, o lo que es lo mismo, debes trabajar desde una "metaclase". Rápidamente, sería algo así: class Meta(type): def __new__(meta, name, bases, dict): def setattr(cls, name, value): pass dict["__setattr__"]=setattr return type.__new__(meta, name, bases, dict) class subclase: __metaclass__ = Meta miembro = clasebase(parámetros) Si no quieres ir añadiendo el atributo __metaclass__ a cada clase, también puedes poner la metaclase como variable global al módulo donde estés definiendo las clases: class __metaclass__(type): def __new__(meta, name, bases, dict): def setattr(cls, name, value): pass dict["__setattr__"]=setattr return type.__new__(meta, name, bases, dict) class subclase: miembro = clasebase(parámetros) Esta solución ignora la reasignación de atributos de clase. Lo suyo sería lanzar alguna excepción. -- Hyperreals *R: http://ch3m4.org/blog Quarks, bits y otras criaturas infinitesimales _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/