Las propiedades permiten controlar el acceso a los atributos privados de la instancia. Dos de los tipos más comunes son los getters y los setters.
Los getters permiten obtener el dato privado. Se definen con un decorador y con un método que devuelva el dato. Ejemplo:
@propertydefmostrar(self):return self._atributo_privado
Los setters permiten cambiar los datos. Se definen con un decordador y poniendo .setter al final del nombre. A continuación, se escribe un método en donde se establezcan las condiciones para cambiar el dato privado. Ejemplo:
@cambiar_atributo.setterdefcambiar_atributo(self, permitir):if permitir:
self._atributo_privado = "un nuevo dato"
Para entender su funcionamiento, veamos el siguiente ejemplo:
Imagina que en una pizzeria tienen un ingrediente especial para clientes VIP, y solo al poner una clave se autoriza la preparación de la pizza con este ingrediente. Por lo tanto, para la pizza se crea una clase en donde por defecto ese ingrediente no se permita.
classPizza:def__init__(self, ingredientes):
self.ingredientes = ingredientes
self._permitir_ingrediente_especial = False @property # ---> es el getter defpermitir_ingrediente_especial(self):return self._permitir_ingrediente_especial
@permitir_ingrediente_especial.setter # ----> es el setterdefpermitir_ingrediente_especial(self, permitir):if permitir:
contraseña = input("Escriba la contraseña: ")
if contraseña == "PlAtZi":
self._permitir_ingrediente_especial = Trueelse:
raise ValueError("Alerta! Intruso")
De esta manera, se asegura que solo al introducir la clave de acceso, el ingrediente especial pueda ser utilizado.
En la consola podemos verificar el código de la siguiente manera:
>>>pizza_VIP = Pizza(['queso', 'tomate'])
>>>print(pizza_VIP.permitir_ingrediente_especial)
False
>>>pizza_VIP.permitir_ingrediente_especial = True
Escriba la contraseña: PlAtZi
Acceso Confirmado. Se permite usar el ingrediente especial
>>>print(pizza_VIP.permitir_ingrediente_especial)
True
Referencia:
Curso de Python de SoloLearn
No, no me queda claro.
Gran complemento para la clase que levanto tantísimas dudas!
Muchas gracias ☺️
Agradecido Maria Jose por tan esmerado aporte.
Éxitos en la carrera!