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
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)
Vemos también que tenemos acceso a los métodos definidos en la clase.