Ocultando atributos y métodos (I)

Una de los principios de la programación orientada a objetos es el encapsulamiento, que -como ya se ha comentado- es el nombre que damos a la propiedad según la cual ocultamos el estado de un objeto de forma que solo sea posible interactuar con él a través de sus métodos. Sin embargo, esto no es del todo cierto en lo que hemos visto hasta ahora. Volvamos a la clase que definía un círculo:

class Circulo:
    
    pi = 3.141592
    
    def __init__(self, radio):
        self.radio = radio
    
    def area(self):
        return Circulo.pi * (self.radio ** 2)

Si instanciamos la clase...

c = Circulo(2)

...para empezar, podemos acceder al atributo radio:

c.radio

2

Pero no solo, eso, podemos cambiarlo:

c.radio = 5
c.radio

5

Y podemos acceder al atributo pi de la clase:

Circulo.pi

3.141592

Y modificarlo también:

c._Circulo__radio = 4
c._Circulo__radio

4

¿Recuerdas que la función dir nos permitía obtener un listado de atributos y métodos de un objeto? Podemos aplicarla aquí:

dir(c)

La función dir

Vemos también que tenemos acceso a los métodos definidos en la clase.