implicaciones de usar property, setters y getters

lasizoillo lasizoillo en gmail.com
Mie Mayo 7 17:43:23 CEST 2008


Buenas:

El día 5 de mayo de 2008 20:33, Patricio Valarezo Lozano
<patovala en pupilabox.net.ec> escribió:
> Hola, quisiera por favor que alguien me pudiera explicar la verdadera
> necesidad de usar property para definir getters y setters o para poder
> acceder a funciones privadas, me explico mejor:
>

La verdadera necesidad es hacer cosas en la
lectura/escritura/(borrado) de los atributos.

Algunos ejemplos:
- Hacer un atributo de solo lectura. Ejemplo: impides al programador
modificar el login de un usuario, porque hay una regla de negocio que
impide hacerlo (y así queda descrita en el código).
- Modificar almacenado de un dato: Ejemplo: Al guardar una imagen en
un registro, guardo la imagen en el sistema de ficheros y en el campo
la ruta para encontrarla. Al leer, la funcion recupera de la base de
datos la ruta a la imagen y la devuelve despues de leerla del sistema
de ficheros.
- Validaciones: Asegurar que un tanto por ciento es un número positivo
comprendido entre 0 y 100, que una dirección de correo es correcta,
...
...

>  Estoy revisando un código que usa Elixir(1) para definir un mapper a una
> base de datos, usa el siguiente código:
>
>
>  class Person(Entity):
>     id = Field(Integer, primary_key=True)
>     name = Field(String(50), required=True)
>     biography = Field(Text)
>     photo = Field(Binary, deferred=True)
>     _email = Field(String(20), colname='email', synonym='email')
>
>     def _set_email(self, email):
>        self._email = email
>     def _get_email(self):
>        return self._email
>     email = property(_get_email, _set_email)
>
>

Este código me parece bastante absurdo. Le vería sentido si hicieras
una validación de que el mail fuese correcto en el setter, por poner
un ejemplo.

Viendo codigo real, seguro que ves ejemplos mejores de cuando utilizar
dicha funcionalidad ;-)

Un saludo:

Javi
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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