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