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:
@property
def mostrar(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.setter
def cambiar_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.
class Pizza:
def __init__(self, ingredientes):
self.ingredientes = ingredientes
self._permitir_ingrediente_especial = False
@property # ---> es el getter
def permitir_ingrediente_especial(self):
return self._permitir_ingrediente_especial
@permitir_ingrediente_especial.setter # ----> es el setter
def permitir_ingrediente_especial(self, permitir):
if permitir:
contraseña = input("Escriba la contraseña: ")
if contraseña == "PlAtZi":
self._permitir_ingrediente_especial = True
else:
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
Curso de Complejidad Algorítmica con Python