[Python-es] Limitar asignacion a miembro de clase

Alvaro Manrique sanreikaj.foros en gmail.com
Mar Nov 8 18:32:45 CET 2011


Muchas gracias por sus respuestas, de verdad muy enriquecedoras, voy a 
estudiar y a evaluar cada una de
las respuestas, no lo habia hecho antes ya que  la empresa a la que 
trabajo (igual como programador) me ha absorbido
todo mi tiempo y esto es un desarrollo propio que llevo por mi cuenta.

Tambien quiero aprovechar para realizarles otra pregunta, la cual es... 
Existe alguna manera de obtener el nombre de la
instancia de una clase desde la misma?? Es decir, tratando de hacer uso 
de la introspección de python, como pudiera hacer
algo como self.instancia, self.nombreinstancia??


------------------------------

Alvaro Manrique
Programador
PIN:     221C390B
Skype:   alvaro_manrique
Venezuela
------------------------------


On 16/08/11 12:23, Anler Hernandez Peral wrote:
> Creo que la solución de Chema Cortes no es necesaria ya que según por 
> lo que pones estás tratando de acceder al atributo desde una 
> "instancia" de la clase que encapsula lo que sería un descriptor:
>
> c = subclase
> c.miembro.métodos_clasebase(xxx)
>
> No obstante si estoy yo equivocado, y la asignación la quieres 
> "sobrecargar" a la clase en sí, tendrías que implementar lo que dice 
> Chema Cortes ya que las clases no son más que instancias de la clase 
> "type"
> --
> anler
>
>
> 2011/8/16 Chema Cortes <pych3m4 en gmail.com <mailto:pych3m4 en gmail.com>>
>
>     El día 16 de agosto de 2011 05:54, Alvaro Manrique
>     <sanreikaj.foros en gmail.com <mailto:sanreikaj.foros en 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 en python.org <mailto: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/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20111108/0184cd94/attachment.html>


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