Getters & setters

  • Getters & setters

    Posted by Yoshua Díaz on 2 mayo, 2025 en 1:57 pm

    Hola, estoy aprendiendo python y tengo problemas entendiendo el property() y los getters y setters un poco. Si implemento los métodos para sí poder acceder a los atributos privados, entonces ¿qué punto tiene hacerlos privados? o es que en este primer ejemplo de introducción aún no se ve una aplicación “útil” de la privatización. Apreciaría su guía, gracias

    Carlos Hernández respondido 13 horas, 57 minutos 3 Miembros · 2 Respuestas
  • 2 Respuestas
  • Angel Sánchez

    organizador
    2 mayo, 2025 en 5:44 pm

    Claro. Lo que pasa es que al principio puede parecer innecesario hacer un atributo privado (__tematica) si de todos modos vas a crear métodos para acceder y modificar su valor. Pero el punto real no es simplemente ocultarlo, sino tener control sobre cómo se accede o modifica.

    En tu ejemplo, se usa property() para que puedas usar navidad.tematica como si fuera un atributo normal, pero internamente está pasando por los métodos _get_tematica y _set_tematica. Esto te permite, por ejemplo, más adelante poner validaciones, imprimir logs, calcular un valor en tiempo real, etc., sin cambiar la forma en que se usa desde fuera.

    Te doy un ejemplo simple con validación, que muestra por qué esto es útil:

    class GalletaConTematica:

    def __init__(self, tematica):

    self.__tematica = tematica

    def get_tematica(self):

    return self.__tematica

    def set_tematica(self, value):

    if value in ["Navidad", "Pascua", "Halloween"]:

    self.__tematica = value

    else:

    print("Temática no válida")

    tematica = property(get_tematica, set_tematica)

    galleta = GalletaConTematica("Navidad")

    print(galleta.tematica)

    galleta.tematica = "Cumpleaños" # Este cambio no se permite

    print(galleta.tematica)

    Sin los métodos, no podrías evitar que alguien pusiera un valor que no tiene sentido para tu lógica. En resumen: sí, en este primer ejemplo no se ve tan necesario, pero cuando tu código crece, tener ese control se vuelve muy útil. Y usar property() te deja tener ese control sin cambiar la forma en que accedes a los datos desde fuera.

  • Carlos Hernández

    Miembro
    5 mayo, 2025 en 8:27 am

    el motivo de hacerlo privado es que puedas validarlo antes de que alguien lo intente modificar. Si es público cualquiera accede y no tienes oportunidad de hacer una validación, al hacerlo privado en el método setter puedes agregar lógica de validación 😀

Inicia sesión para responder.

Start of Discussion
0 de 0 respuestas Junio 2018
Ahora