A partir de pyBta 0.2, la biblioteca
empezó a ofrecer un modo sencillo de leer, o escribir, sobre los datos
de los elementos que componen la biblioteca. Por ejemplo, si queremos
cambiar la posición de un botón, se podrán usar una de estas tres
formas:
self.x=50
Cambia
la posición horizontal del botón.
self.y=100
Cambia
la posición vertical del botón.
self.posicion=50,100
Cambia
la posición horizontal y vertical del botón conjuntamente.
Esta forma, da la sensación de estar
accediendo a un dato del botón directamente, pero en realidad, no
es así.
Normalmente los atributos de una clase
son accesible desde el exterior mediante funciones setter (Cambian el
valor de un atributo) y funciones getter (Leen el valor de un
atributo) Por ejemplo, si estamos generando un programa que contiene
un botón y queremos cambiar el ancho del mismo, lo normal sería
usar este tipo de funciones, más o menos, de este modo(El modo
cambiará según el lenguaje usado)
boton.set_width(120)
Como se ve, la función setter sirve
para cambiar el atributo de un objeto, en este caso el ancho del
botón. La función getter se suele ver en esta forma:
boton.get_width()
Este tipo de función hace retornar el
valor actual del atributo deseado, en este caso el ancho del botón.
Cuando empecé con esta idea, yo
intentaba usar una sola función que me permitiera, tanto acceder, como cambiar el valor de una propiedad para un elemento. Estas
funciones llevaban esta forma:
def
valor_nombre(self,valor=None):
if
valor!=None:
self.__nombre=valor
return
self.__nombre
Si se llamaba a la función enviándola
un valor distinto de None, esta aplicaba el valor recibido al
atributo deseado y al final lo retornaba a la zona del código donde
se había producido la llamada.
Si se llamaba a la función sin ningún
valor, esta pasaba de la zona donde se producía
la asignación del valor al atributo y
retornaba directamente el valor actual del atributo al código que
realizo la llamada.
Esto fue ligeramente cambiado para la
siguiente versión de la biblioteca. Para la segunda versión, PyBta
hace uso de la función, property,
para facilitar el acceso a los atributos que componen un objeto,
creando así, una interfaz entre objeto y usuario mucho mas sencilla
y amena de usar.
Lo que hace la
función property,
es agrupar el trabajo de las funciones setter y getter en un solo
atributo. Esto se hace así:
self.__width=width
def
get_width(self):
return
self.__width()
width=property(fset=set_width,fget=get_width)
La
función property recibe dos parámetros. El primero sirve para
enlazar la función, set_width, como función setter, para el atributo
width. El segundo parámetro, hace lo mismo que el primero, pero
enlazando la función recibida como función getter para el atributo
width.
En
realidad, yo no uso exactamente el método que hasta ahora estoy
contando. A partir de la segunda versión de la biblioteca, empecé a
usar una forma híbrida entre esta que acabo de explicar y el modo
que usaba en la primera versión. La idea queda así:
def
__valor_visible__(self,valor=None):
if
valor!=None:
self.__visible=valor
return
self.__visible
visible=property(fget=__valor_visible__,
fset=__valor_visible__)
Como
se puede observar, sigo usando el modo de la primera versión. Solo
que al final, transformo la función a propiedad para facilitar su
acceso.
De
esta forma se puede cambiar el valor de un atributo, en este caso la
visibilidad, usando este modo:
elemento.visible=False
Si
lo que se desea es preguntar por el estado actual de una propiedad,
se usará este modo:
if
elemento.visible:
En
la próxima entrada, hablaré sobre como se agrupan los atributos
dentro de los elementos. Por ahora, diré que pyBta posee un grupo de
atributos que son generales a casi todos sus elementos y después un
grupo de atributos que son propios del módulo de controles y otro
grupo propio para el módulo de escenas.
No hay comentarios:
Publicar un comentario