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}

1 respuesta

Respuesta
1

Ya en StackOverflow me dieron una respuesta. Me sugirieron el uso de __slots__ aunque pierdo el __dict__ lo cual funciona. Si tienen algún otro aporte, se los agradecería. La respuesta está en:

https://es.stackoverflow.com/questions/163940/c%c3%b3mo-puedo-encapsular-los-objetos-en-python-para-evitar-la-creaci%c3%b3n-de-variables 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas