implicaciones de usar property, setters y getters

Patricio Valarezo Lozano patovala en pupilabox.net.ec
Lun Mayo 5 20:33:32 CEST 2008


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:

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)


Aquí ha declarado _email como privado (por el _ ) y luego define 
_set_email y _get_email para poder acceder a esta propiedad, luego 
define con property las propiedades y las asigna a email, ahora se 
podría acceder a _email mediante <objeto>.email, estoy en lo correcto?. 
Mi pregunta realmente es Por qué molestarse haciendo todo esto si a 
podría definir email = Field(...) como definió photo y los otros 
atributos??.

He leído en alguna parte que en Python lo de setters y getters no es muy 
bien visto (puesto que proviene de programadores acostumbrados al java y 
sus beans). tomando en cuenta que Python es un lenguaje que da al 
programador una gran libertad, quisiera que me dijeran cual es la 
ventaja real de usar _atributo y luego acceder con property? de que me 
estaría perdiendo si no lo hiciera así?

saludos y gracias por sus comentarios

Patricio Valarezo.


(1)  http://elixir.ematia.de/apidocs/elixir.fields.html

-- 
patoVala
Linux User#280504
Hablando en http://www.elprimoalcahuete.com
"Someone whom you reject today, will reject you tomorrow."
_______________________________________________
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