EJERCICIO 4_clase circulo pledin 3. Programación orientada a objetos

En Python, el símbolo @ se llama decorador. Piensa en un decorador como un "superpoder" o una etiqueta especial que se coloca encima de una función para modificar o extender su comportamiento sin cambiar su código base.

En tu programa, el @ se usa para crear Getters y Setters seguros, protegiendo el atributo radio.

Desglose paso a paso del código

1. El Constructor (__init__)

 class circulo():

def __init__(self,radio):

self.radio=radio

  • Cuando creas un círculo con c1 = circulo(3), se ejecuta esta función.

  • Fíjate que asigna el valor usando self.radio = radio (llamando al setter que veremos más abajo, validando que el 3 sea mayor o igual a cero).

  • El Getter (@property)

  • @property

    def radio(self):

    print("Estoy dando el radio")

    return self.__radio

  • ¿Qué hace? Permite leer el valor del radio como si fuera una variable normal, pero ejecutando código en el medio.

  • Cuando en la celda 2 escribes c1.radio, Python no está leyendo una variable directa, está ejecutando esta función. Por eso en la consola aparece primero el mensaje Estoy dando el radio y luego te devuelve el número 3.

  • 3. El Setter (@radio.setter)

  • @radio.setter

    def radio(self,radio):

    if radio>=0:

    self.__radio = radio

    else:

    print("Radio debe ser positivo")

    self.__radio=0

    • ¿Qué hace? Permite modificar o asignar un nuevo valor al radio de forma controlada (por ejemplo, c1.radio = 5).

    • Su trabajo principal es validar que no te equivoques. Si intentas poner un radio negativo (como -3), el programa intercepta el cambio, imprime "Radio debe ser positivo" y asigna 0 para evitar que el círculo tenga un tamaño inválido.

    En resumen

    Este código utiliza las propiedades de Python para encapsular los datos. En lugar de dejar que cualquiera cambie el radio libremente, el programa vigila cada vez que pides el radio (Getter) o intentas cambiarlo (Setter).

    • @property, @radio.setter 

    • Técnicamente (lo que hacen): Ejecutan una transformación. Sin el @property, Python creería que def radio(self): es un método común y corriente al que tendrías que llamar con paréntesis (es decir, escribiendo c1.radio()). Al poner el @property, Python dice: "Ah, perfecto, ahora permitiré que lo llamen como si fuera una variable normal (c1.radio), pero ejecutando el código de adentro".

    Piénsalo como un guardia de seguridad

    Imagina que el decorador @ es como ponerle un uniforme de seguridad a una función:

    El cartel dice "Guardaespaldas", pero lo importante es que, al llevar ese uniforme, la función ya no se comporta como una persona común: ahora se interpone automáticamente cada vez que alguien intenta leer (getter) o modificar (setter) el radio.

    • Cada vez que escribes c1.radio, el @property salta y dice: "¡Espera! Antes de entregar el dato, ejecuta este código".

    • Cada vez que intentas cambiar el valor, el @radio.setter salta y dice: "¡Espera! Antes de guardar este número, déjame validarlo".

  • Ejercicio celda 1 google colab


    class circulo():

    def __init__(self,radio):

    self.radio=radio


    @property

    def radio(self):

    print("Estoy dando el radio")

    return self.__radio


    @radio.setter

    def radio(self,radio):

    if radio>=0:

    self.__radio = radio

    else:

    print("Radio debe ser positivo")

    self.__radio=0



    Celda 2 de google colab (carb robleda...)

    >>> c1=circulo(3)

    >>> c1.radio

    Estoy dando el radio

    3

    >>> c1.radio=4

    >>> c1.radio=-1

    Radio debe ser positivo

    >>> c1.radio

    0

  • @property (Getter): Es la ventanilla para leer el dato de forma limpia.

  • @radio.setter: Es el guardia de seguridad que valida que lo que intentan guardar tenga sentido antes de dejar entrar el dato a la caja fuerte.


  • Entradas populares de este blog

    BLOQUE 5_Páginas de IA generativa de video (gratis y sin pagar) para 4º ESO IA artificial_Inteligencia artificial

    GrÁfico de lineas, google colab o jupyter ,GRÁFICO DE DISPERSIÓN Y DETECCIÓN DE PROFUNDIDAD, NOTEBOOK, PÍDELE A TU IA FAVORITA,