Retroceder   Foros del Web > Temas generales de computación > Programación > Python

Respuesta
 
Herramientas Desplegado
Antiguo 27-ago-2008, 09:11   #1 (permalink)
betopm ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2008
Mensajes: 29
get y set

Nuevamente con mis dudas, me estanque un poquito en este tema, a lo que entendi, estas palabras se usan, mas que nada, en las clases o procedimientos para ocultar al usuario los metodos que se usan para obtener y modificar los datos, es correcto??? que diferencia hay entre estos dos??? y que diferencia habria entre usar estos comandos y usar una funcion privada (def __ejemplo). A mi entender, mediante estos nombres se puede acceder a los metodos, pero no modificarlos, que en si, las funciones con def tampoco pueden modificarse o si??? me enrrede en este punto, espero me aclaren estas dudas. Gracias de antemano. Saludos.
betopm está desconectado   Responder Citando
Antiguo 28-ago-2008, 12:11   #2 (permalink)
import fdw.mod.py
alvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradable
 
Avatar de alvlin
 
Fecha de Ingreso: julio-2005
Ubicación: Canelones, Uruguay
Mensajes: 4.413
Enviar un mensaje por MSN a alvlin Enviar un mensaje por Yahoo  a alvlin Enviar un mensaje por Skype™ a alvlin
Respuesta: get y set

Fijate en este ejemplo simple en Java

Código:
private int numero;

public int getNumero() {
    return numero;
}

public void setNumero(int nuevoNumero) {
    this.numero = nuevoNumero;
}
O sea: le quitás al "usuario" del método la posibilidad de "tocar" el valor del atributo directamente.
Si quiero obtener el valor de numero, no tengo más remedio que usar el método getNumero(), y el valor solamente lo puedo cambiar usando setNumero()

En python no se hace igual, sino que siempre se accede al atributo con su nombre, y dentro de la clase se asignan las funciones que se encargarán de "controlar" el acceso. Fijate en este ejemplo que encontré en esta página, y comparalo con el de arriba:

Código:
class Contacto(object):

    def set_email(self, value):
        if '@' not in value:
            raise Exception("Esto no parece ser una dirección de correo")
        self._email = value

    def get_email(self):
        return self._email

    email = property(get_email, set_email)
La diferencia principal es que luego yo voy a hacer:

Código:
contacto = Contacto();
contacto.email = "algo@algo.com"
como si estuviera asignando directamente, pero en realidad se llamará a la función set_email con el parámetro "algo@algo.com".

Espero que quede claro, para terminar creo que es importante mencionar que los nombres son completamente arbitrarios, solamente una convención.


Saludos.
__________________
El Codiguero.com

"Luke yo soy tu padre, Obi Wan es un ca*ón;
Leia es tu hermana, Han Solo es Harrison Foooooooooord"
alvlin está desconectado   Responder Citando
Antiguo 28-ago-2008, 12:48   #3 (permalink)
betopm ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2008
Mensajes: 29
Respuesta: get y set

Diran que molesto mucho, pero disculpenme en serio, me interesa aprender de verdad. Entendi que con el set se obtienen los valores del procedimiento que invoco a la clase, se procesa, y se llevan a cabo procedimientos dentro del mismo set, mientras que get devuelve el resultado despues de ser procesado por el set, esta bien lo que entendi??? diran que noefito soy, pero que diferencia hay entre usarlos y no usarlos??? suponiendo dos clases:



Cita:
class suma (object):
def numero (a, b):
c = a + b
return c
------------------------------------------------------------

Cita:
class suma (object):

def set_numero (self, a, b):
c = a + b

def get_numero (self):
return c


Que diferencia habria entre estas dos clases, cuando las dos hacen lo mismo, sumar dos numeros (suponiendo que haya escrito bien las clases). En serio mil disculpas por las molestia que doy, no conozco a nadie que sepa de python por eso recurro a ustedes. Gracias. Saludos.
betopm está desconectado   Responder Citando
Antiguo 28-ago-2008, 12:55   #4 (permalink)
Colaborador
David el Grande llegará a ser famoso muy prontoDavid el Grande llegará a ser famoso muy prontoDavid el Grande llegará a ser famoso muy prontoDavid el Grande llegará a ser famoso muy prontoDavid el Grande llegará a ser famoso muy pronto
 
Avatar de David el Grande
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 7.170
Exclamación Respuesta: get y set

No, en este caso lo que haces es un "método" de la clase no una "propiedad".

Lo que hacemos con get y set es ocultar las propiedades al usuario para que no pueda accederse a ella directamente (Principio de Ocultación POO).
__________________
"En la vida muchas veces tenemos que ser aprendices, y muchas veces maestros"
P.S.: Pregunta siempre en el foro correcto.
David el Grande está desconectado   Responder Citando
Antiguo 28-ago-2008, 12:58   #5 (permalink)
betopm ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2008
Mensajes: 29
Respuesta: get y set

Retomando el ejemplo de alvlin, si yo le quitara el get y set y pusiera esos dos en un solo def email, que diferencia habria??? Igual y los estoy confundiendo porque yo estoy un poco confundido, set si es una palabra reservada de python, pero get tengo entendido que no, entonces, por ende, el procedimiento con set hace su funcion, pero el procedimiento con get, si le cambiaramos la palabra, haria lo mismo???? Espero haya quedado un poco mas claro mi duda, las respuesta que me han dado si me han ayudado muchisimo, aclarandome que son propiedades y no metodos. Gracias.

Última edición por betopm; 28-ago-2008 a las 13:17.
betopm está desconectado   Responder Citando
Antiguo 28-ago-2008, 13:04   #6 (permalink)
import fdw.mod.py
alvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradable
 
Avatar de alvlin
 
Fecha de Ingreso: julio-2005
Ubicación: Canelones, Uruguay
Mensajes: 4.413
Enviar un mensaje por MSN a alvlin Enviar un mensaje por Yahoo  a alvlin Enviar un mensaje por Skype™ a alvlin
Respuesta: get y set

Como no podés acceder al valor "real" (dado que lo estás ocultando, tal y como mencionó David), hacés un método para darle el valor, y otro para obtenerlo. tan simple como eso.

set recibe el nuevo valor y lo asigna, si tiene que hacer algún cálculo lo hace.

get toma el valor actual y lo devuelve.

No tienen por qué usarse en secuencia, simplemente cuando necesites el valor en vez de usar

variable = objeto.atributo

usás

variable = objeto.getAtributo()

y cuando necesitás que "atributo" cambie, usás el set.


Saludos.
__________________
El Codiguero.com

"Luke yo soy tu padre, Obi Wan es un ca*ón;
Leia es tu hermana, Han Solo es Harrison Foooooooooord"
alvlin está desconectado   Responder Citando
Antiguo 28-ago-2008, 14:05   #7 (permalink)
betopm ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2008
Mensajes: 29
Respuesta: get y set

Ya entendi, cuando necesito el valor de la propiedad lo obtengo con el get, cuando quiero que cambie lo hago con set, siempre y cuando ya haya declarado que las propiedades van a corresponder a un determinado objeto:

email property (set_email, get_email)

Get y set son la manera de trabajar con propiedades, sin ellos no se pueden manejar propiedades, porque estas deben de estar ocultas al usuario para evitar modificaciones. Gracias a todos por haberme ayudado. Se los agradezco muchisimo. Saludos.
betopm está desconectado   Responder Citando
Antiguo 28-ago-2008, 14:39   #8 (permalink)
import fdw.mod.py
alvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradablealvlin es realmente agradable
 
Avatar de alvlin
 
Fecha de Ingreso: julio-2005
Ubicación: Canelones, Uruguay
Mensajes: 4.413
Enviar un mensaje por MSN a alvlin Enviar un mensaje por Yahoo  a alvlin Enviar un mensaje por Skype™ a alvlin
Respuesta: get y set

Correcto, excepto por un detalle: no se hacen para evitar modificaciones, sino para evitar modificaciones no controladas.
Siguiendo el ejemplo del email que pegué antes, seguramente querrás que una variable que guarde un correo electrónico contenga al menos una @, y si no lo contiene que el valor no se guarde.

Si dejás que el usuario (usuario del método, quiero decir) acceda directamente al atributo, no tenés control sobre el valor que pueda contener.

Ese es el motivo del "set".
El motivo del "get" es permitirte enviar solamente la parte que te interesa del valor del atributo. Por ejemplo, suponiendo que tengas un atributo "fecha":

fecha = "28/08/2008"

podrías tener un método getFecha() que te devolviera algo como:

"Jueves 26 de Agosto de 2008"

que no es el valor real de fecha, pero probablemente sea el valor que te interesa.

Repito que los nombres son totalmente arbitrarios, si en vez de "getFecha" quiero que el método se llame "soyAlvlin()", funcionará de la misma forma (aunque no será muy intuitivo para leer el código ).

A propósito, en mi primer mensaje hice mención a una página cuyo enlace me olvidé de pegar, es ésta:
http://tomayko.com/writings/getters-setters-fuxors



Saludos.
__________________
El Codiguero.com

"Luke yo soy tu padre, Obi Wan es un ca*ón;
Leia es tu hermana, Han Solo es Harrison Foooooooooord"
alvlin está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 10:16.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96