fbpx

Duda sobre los @property

  • Duda sobre los @property

    Posted by Armando Vázquez on 13 julio, 2021 en 1:54 am

    ¡Hola!

    ¿Hay alguna manera de que al crear las instancias no aparezca el mensaje de “Se cambia el estado a …” pero sí cuando lo cambie después a traves del @property? Esto es referente a los ejercicios del lección 8, tema 8.

    Adrian de la Cruz Espinosa Zurita respondido 2 años, 9 meses 2 Miembros · 5 Respuestas
  • 5 Respuestas
  • Armando Vázquez

    Miembro
    13 julio, 2021 en 1:57 am

    Una disculpa, se duplico la publicación por error.

  • Adrian de la Cruz Espinosa Zurita

    Miembro
    13 julio, 2021 en 5:48 am

    Hola. ¿Todo el código lo estás ejecutando directo? En mi caso yo uso la terminal para importarlo y no me sucede ese detalle. Tal vez como lo ejecutas todo, el __init__ posiblemente este llamando el setter de estado y por ese se ejecuta el print no deseado. ¿Qué editor de texto usas? Veo que te trae la opción para compilar directo, me interesa para poder intentarlo. Pd. Yo también estoy terminando esos ejercicios.

  • Adrian de la Cruz Espinosa Zurita

    Miembro
    13 julio, 2021 en 6:24 am

    Hola. no pude modificar mi respuesta anterior, pero ya hice pruebas y esto concluí:

    Primero: El constructor de la clase __INIT__ debe inicializar las variables que le has indicado, entre ellas el de ‘estado’. Por ello el __init__ hace un llamado al decorador de estado, para poder inicializar la variable de estado. Es decir, SI o SI lo debe de ejecutar, a menos que no la inicialices en el __init__ pero el ejercicio te estipula hacerlo.

    Segundo. Estos decoradores son para obtener/sobreescribir los atributos, por ende ..pues.. no es natural que lleven esos mensajes de cambio, a menos que sea un valor incorrecto, en donde tiramos el valueError.

    Ejemplo:

    >>> Objeto.x = 5

    >>> ‘Ha colocado un numero entero satisfactoriamente’

    ¿Te imaginas tener que leer estos mensajes cada vez que usamos las variables? 😀

    Saludos y si cometí algún error, agradecería me lo comenten, ya que lo que he dicho, es lo que he estado aprendiendo.

    Muchos ánimos y para adelante.

    • Armando Vázquez

      Miembro
      13 julio, 2021 en 9:53 pm

      Es que tengo una vaga referencia de POO con Java donde recuerdo, más no lo puedo confirmar, que si creabas una clase con sus variables de instancia ya definidas y establecías un setter a tu gusto, por ejemplo: justamente ponías una impresión de pantalla indicando que lo estabas modificando; al crear la instancia de la clase, no te arrojaba ningún mensaje por la asignación de valor en la variable de instancia hasta que usabas el setter.

      Siento, y espero poder explicarme, que en Java para asignar valores a las variables, el método “tradicional” es asignar el valor directamente en el espacio de memoria, que sucede cuando creas la instancia y sus valores internos. Ya cuando interpreta que es un atributo privado, lo que hace el interprete es que ese método “tradicional” de modificar el valor de una variable solo lo puede hacer a través de la función setter.

      Mientras que Python, por los resultados que veo, es como si redefiniera totalmente el método “tradicional” de asignar valores para esa variable en especifico y no desde donde lo puede aplicar.

      Y bueno, la impresión del mensaje es porque en los ejercicios estamos simulando un juego RPG, por lo que quiero darle un mensaje al usuario/jugador de que esta haciendo un cambio y que además se hizo con éxito.

      Cuando cargas una partida nueva en un RPG, al darte los atributos iniciales, no suelen dar el mismo mensaje que cuando vas ascendiendo/mejorando y eso es lo que quiero lograr simular en estos ejercicios.

      Respecto al editor, el que utilizo es Visual Studio Code, se me hace útil y amigable, además de que no es pesado, te lo recomiendo.

      • Adrian de la Cruz Espinosa Zurita

        Miembro
        17 julio, 2021 en 12:55 pm

        Hola buenos días, disculpa la demora en responder, fue una semana complicada.

        Efectivamente, como comentas, en Java cuando inicializas las variables de clase con los constructores de la clase al momento de invocar el objeto, estos no hacen un llamado interno a sus setters, sino que lo asignan directamente. Ya por fuera se usan los setters para asignar valores ya que son variables privadas. En eso tienes razón.

        Igual estoy entendiendo poco a poco python, y en mi caso me di cuenta que el INIT a fuerza usa los setter, si la variable tiene por lo menos un decorador. Es decir, si creas una variable nombre y solo le creas el decorador @priority (GETTER), al momento de invocar el objeto asignando un valor a esa variable, python te arroja un error de que no se puede inicializar la variable. Ya que python supone que estas usando los 2 decoradores, y al no encontrarlo te lo dice. Pero sino le asignas ningún decorador, la variable se inicializa sin problema alguno….en resumen, o usas los dos decoradores o usas ninguno.

        Lo del mensaje, tienes razón de los rpg. Yo jugué hace tiempo Dofus y me has hecho recordar buenos momentos. Esa idea de los mensajes es buena.

        Probaré ese editor a ver que tal. Gracias n.n

Inicia sesión para responder.

Start of Discussion
0 de 0 respuestas Junio 2018
Ahora