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 <pych...@gmail.com <mailto:pych...@gmail.com>>
El día 16 de agosto de 2011 05:54, Alvaro Manrique
<sanreikaj.fo...@gmail.com <mailto: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 <mailto:Python-es@python.org>
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/