Cómo encapsular los objetos en python para evitar la creación de variables nuevas dentro de las instancias?
Me explico con el siguiente código:
class EsUnCirculo:
def __init__(self, radio = 1):
self.__radio = radio
@property
def radio(self):
return self.__radio
@radio.setter
def radio(self, valor):
self.__radio = valor
EsUnCirculo_uno = EsUnCirculo()
EsUnCirculo_dos = EsUnCirculo(2)
print("EsUnCirculo_uno contiene: ",EsUnCirculo_uno.__dict__)
print("EsUnCirculo_dos contiene: ",EsUnCirculo_dos.__dict__)
EsUnCirculo_uno.radio = 3
EsUnCirculo_dos.radoi = 4
# Supongamos que cometo un error de typo acá (cosa que
# lamentablemente es muy frecuente en mi). Debería darme
# un error indicando que la clase no contiene esa variable/
# atributo/property. Incluso agradecería un warning. Pero,
# en cambio, la crea dentro de la instancia :/.
# VER LA SALIDA.
# Esto no es bueno para mi OCD. Cómo evito esto?
print("EsUnCirculo_uno contiene: ", EsUnCirculo_uno.__dict__)
print("EsUnCirculo_dos contiene: ", EsUnCirculo_dos.__dict__)
LA SALIDA ES:
EsUnCirculo_uno contiene: {'_EsUnCirculo__radio': 1}
EsUnCirculo_dos contiene: {'_EsUnCirculo__radio': 2}
EsUnCirculo_uno contiene: {'_EsUnCirculo__radio': 3}
EsUnCirculo_dos contiene: {'_EsUnCirculo__radio': 2, 'radoi': 4}