11 - Controlando el acceso a los atributos de un objeto

Lección 11 del curso Python Nivel Avanzado.

Introducción

En la lección anterior vimos cómo manejar los atributos públicos y privados en Python y vimos que en esencia todos los atributos (y también los métodos) son públicos aunque podemos usar convenciones para indicar que ciertos atributos se deberían manejar como si fuesen privados.

Pero, ¿qué pasa si por alguna razón al implementar nuestro programa queremos acceder a un atributo “privado” desde fuera de la clase?

Pues Python incorpora una herramienta que se conoce como la “propiedad”, que permite precisamente controlar el acceso a los atributos “privados” de un objeto. Veamos entonces en qué consiste.

Suscríbete y accede al código fuente y al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

El decorador @property

Entendamos cómo funciona el control de acceso a los atributos de un objeto con un ejemplo.

Volvamos a la clase ProductoBancario y definamos los atributos cliente y saldo como si fuesen privados (usando _ como vimos en la lección anterior).

Estos atributos deberían tratarse como privados (dado el uso del guión de piso) , pero ¿qué pasa entonces si por alguna razón queremos conocer el nombre del cliente o su saldo pero queremos hacerlo de forma “correcta”?

En este caso debemos definir unas propiedades sobre los atributos _cliente y _saldo que nos permitan acceder (o leer) estos valores desde fuera de la clase. Y para ello usamos algo que se conoce como un decorador.

Al usar este decorador podremos acceder a estos atributos “privados” usando la notación .cliente y .saldo. En este caso estamos accediendo indirectamente a estos atributos, con lo cual mantenemos la convención de que no estamos accediendo directamente a los atributos que deberían manejarse como privados.

Pero también podemos usar propiedades tipo setter para fijar o modificar (del Inglés set) el valor de un atributo “privado” sin acceder directamente a este desde fuera de la clase. Para hacer esto también debemos definir una propiedad pero de forma ligeramente diferente al caso anterior, añadiendo precisamente el término setter.

Recuerda suscribirte para acceder al código fuente y al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Ya sabemos cómo usar las propiedades tipo getter y setter para acceder y modificar atributos “privados” de manera indirecta, manteniendo la convención mencionada en la lección anterior.

Y con esto ya estamos listos para la segunda práctica del curso, en donde usaremos tanto los conceptos aprendidos hasta el momento sobre la Programación Orientada a Objetos, como las herramientas para el manejo de excepciones y la manipulación de archivos, para diseñar e implementar una app de productividad.

Ver todas las lecciones de este curso