Re: [Python-es] Limitar asignacion a miembro de clase

2011-11-10 Por tema Alvaro Manrique
Gracias por tu respuesta, tendré en cuenta para la próxima en crear otro 
hilo.


Esa búsqueda que mencionas la he hecho junto con muchas mas, y probé lo 
que me indicas pero no es lo

que busco, seguiré buscando y probando.

--

Alvaro Manrique
Programador
PIN: 221C390B
Skype:   alvaro_manrique

--


On 09/11/11 11:03, Jose Caballero wrote:



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??



Recomendacion: siempre abrir un hilo nuevo para hacer una pregunta 
diferente.



Si buscas en google python introspection puedes encontrar muchas 
cosas en el primer link.
Lo que yo hago (y creo que no es la mejor forma, puede que las haya 
mejores) es


objeto.__class__.__name__

si estas dentro de la propia clase, entonces objeto se cambia por self.



Suerte,
Jose

P.S. como siempre, perdon por la ausencia de tildes cuando trabajo con 
teclado anglosajon.



___
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/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-11-09 Por tema Jose Caballero

 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??



Recomendacion: siempre abrir un hilo nuevo para hacer una pregunta
diferente.


Si buscas en google python introspection puedes encontrar muchas cosas en
el primer link.
Lo que yo hago (y creo que no es la mejor forma, puede que las haya
mejores) es

   objeto.__class__.__name__

si estas dentro de la propia clase, entonces objeto se cambia por self.



Suerte,
Jose

P.S. como siempre, perdon por la ausencia de tildes cuando trabajo con
teclado anglosajon.
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-11-09 Por tema G V
2011/11/9 Jose Caballero jcaballero@gmail.com

 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 haceralgo como self.instancia, self.nombreinstancia??


a que te refieres con nombre de instancia? si te refieres a la clase,
podrias sacarlo mediante type(objeto) aunque incluye el nombre del paquete,
pero eso tiene sentido ya que podria confundirse en el caso de que dos
clases vinieran de paquetes diferentes.

En cualquier caso, una instancia no tiene nombre como tal.

Un saludo
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-11-08 Por tema Alvaro Manrique
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/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-08-16 Por tema Anler Hernandez Peral
Hola Alvaro,

La mejor solución para lo que quieres hacer es que hacer que tu clase
clasebase sea un descriptor, te dejo unos enlaces por si no sabes que
es:

http://users.rcn.com/python/download/Descriptor.htm
http://martyalchin.com/2007/nov/23/python-descriptors-part-1-of-2/

Los descriptores es un tema avanzado en Python y solo están disponibles para
clases new style, te dejo un ejemplo para que lo veas en acción:

http://pastebin.com/T5sqTCHr

--
anler


2011/8/16 Alvaro Manrique sanreikaj.fo...@gmail.com

 Buenas Noches;

   Quisiera pedirles una pequeña ayuda con una duda que tengo, la expongo de
 la siguiente manera:

   Tengo una clase (subclase) donde tiene unos miembros, los cuales son
 instancias de una clase base, esta clase base tiene métodos
 para asignar valor y obtenerlos.

 La subclase esta diseñada de la siguiente manera:

   class subclase:

miembro = clasebase(parámetros)

 Cuando implemento la subclase funciona de maravilla llamando los métodos de
 la clase base.

 c = subclase

 c.miembro.métodos_clasebase(**xxx)

 Hasta aquí todo bien, es el comportamiento esperado para el desarrollo que
 llevo, el punto o mi duda esta en que
 puedo hacer lo siguiente:

c.miembro = cualquier_valor

 Al hacer esto el miembro deja de ser una instancia de la clase base y esto
 me ocasiona errores, quisiera poder evitar esta
 asignación a este miembro, hay alguna manera de hacerlo?

 Agradezco de antemano a cualquier ayuda u orientación que me puedan
 brindar.

 --
 --

 Alvaro Manrique
 Programador
 PIN: 221C390B
 Skype:   alvaro_manrique

 --

 __**_
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/**mailman/listinfo/python-eshttp://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.**com/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/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-08-16 Por tema Chema Cortes
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/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-08-16 Por tema Anler Hernandez Peral
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

 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/

___
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] Limitar asignacion a miembro de clase

2011-08-15 Por tema Alvaro Manrique

Buenas Noches;

   Quisiera pedirles una pequeña ayuda con una duda que tengo, la 
expongo de la siguiente manera:


   Tengo una clase (subclase) donde tiene unos miembros, los cuales son 
instancias de una clase base, esta clase base tiene métodos

para asignar valor y obtenerlos.

La subclase esta diseñada de la siguiente manera:

   class subclase:

miembro = clasebase(parámetros)

Cuando implemento la subclase funciona de maravilla llamando los métodos 
de la clase base.


 c = subclase

 c.miembro.métodos_clasebase(xxx)

Hasta aquí todo bien, es el comportamiento esperado para el desarrollo 
que llevo, el punto o mi duda esta en que

puedo hacer lo siguiente:

c.miembro = cualquier_valor

Al hacer esto el miembro deja de ser una instancia de la clase base y 
esto me ocasiona errores, quisiera poder evitar esta

asignación a este miembro, hay alguna manera de hacerlo?

Agradezco de antemano a cualquier ayuda u orientación que me puedan brindar.

--
--

Alvaro Manrique
Programador
PIN: 221C390B
Skype:   alvaro_manrique

--

___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-08-15 Por tema Alvaro Manrique
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.

Muchas gracias.

--

Alvaro Manrique
Programador
PIN: 221C390B
Skype:   alvaro_manrique

--


On 15/08/11 22:28, Jose Caballero wrote:



  quisiera poder evitar esta
asignación a este miembro, hay alguna manera de hacerlo?


Ideas rápidas:

- property()
- __setattr__()
___
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/


Re: [Python-es] Limitar asignacion a miembro de clase

2011-08-15 Por tema lasizoillo
El día 16 de agosto de 2011 04:43, Alvaro Manrique
sanreikaj.fo...@gmail.com escribió:
 Buenas Noches;

   Quisiera pedirles una pequeña ayuda con una duda que tengo, la expongo de
 la siguiente manera:

   Tengo una clase (subclase) donde tiene unos miembros, los cuales son
 instancias de una clase base, esta clase base tiene métodos
 para asignar valor y obtenerlos.

 La subclase esta diseñada de la siguiente manera:

   class subclase:

        miembro = clasebase(parámetros)

con eso estas usando agregación, no herencia

Mira a ver si lo que quieres hacer es:

class Subclase(clasebase): pass

objeto = Subclase(parametros)
objeto.metodos_clasebase(xxx)

Y ya a partir de ahi todo lo relacionado con la herencia y todas esas cosas.

Saludos:

Javi
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/