Propiedades y Métodos Públicos, Privados y Protegidos en Python
¿Cómo puedes mantener tu código organizado y seguro al mismo tiempo? Imagina que estás creando un programa y quieres asegurarte de que ciertos datos y funciones solo puedan ser utilizados de maneras específicas. Aquí es donde entran en juego las propiedades y métodos públicos, privados y protegidos. Sigue leyendo para descubrir cómo estos conceptos fundamentales en la Programación Orientada a Objetos (POO) pueden ayudarte a mejorar tu código.
¿Qué son las Propiedades y Métodos en Python?
Antes de profundizar en los detalles de los accesos públidos, privados y protegidos, es importante entender qué son las propiedades y métodos en Python o en otro lenguaje. En POO, una propiedad es una característica de un objeto, como su color o tamaño, mientras que un método es una función que pertenece a un objeto, como moverse o hablar.
Si quiere saber más sobre POO, haz clic aquí.
Propiedades
Las propiedades en Python se definen dentro de una clase y se utilizan para almacenar información sobre los objetos creados a partir de esa clase.
Ejemplo:
class Coche: # definición de clase Coche
def __init__(self, color, marca): # método inicializador o constructor
self.color = color # propiedad color
self.marca = marca # propiedad marca
Métodos
Los métodos son funciones definidas dentro de una clase que permiten manipular las propiedades del objeto o definir comportamientos.
Ejemplo:
class Coche:
def __init__(self, color, marca):
self.color = color
self.marca = marca
def arrancar(self):
print("El coche está arrancando")
En la Programación Orientada a Objetos, los objetos pueden interactuar entre sí de varias maneras. Pueden heredar características de otras clases (herencia), pueden contener otros objetos (composición) y pueden interactuar con otros objetos mediante sus métodos y propiedades.
Modificadores de acceso
En Python, los modificadores de acceso no existen en la forma estricta en que se encuentran en otros lenguajes de programación como Java o C++. Sin embargo, Python utiliza convenciones de nomenclatura para indicar el nivel de acceso a otros atributos y métodos de una clase. Estas convenciones no son verdaderas restricciones de acceso, sino más bien sugerencias para los desarrolladores que utilicen el código. Aquí están las principales convenciones de modificadores de acceso para los métodos y propiedades de una clase:
- Públicos,
- Privados
- Protegidos.
Propiedades y Métodos Públicos
Los elementos públicos son aquellos que pueden ser accedidos desde cualquier parte del código. En python, todas las propiedades y métodos son públicos por defecto.
Ejemplo:
class Coche:
def __init__(self, color, marca):
self.color = color # Propiedad pública
self.marca = marca # Propiedad pública
def arrancar(self): # Método público
print("El coche está arrancando")
def mostrar_informacion(self): # Método público que accede a otras propiedades y métodos públicos
print(f"Color: {self.color}, Marca: {self.marca}")
self.arrancar()
Fuera de la clase podemos acceder a los métodos y propiedades así:
mi_coche = Coche("Rojo", "Toyota")
# Accediendo a propiedades públicas
print(mi_coche.color) # Salida: Rojo
print(mi_coche.marca) # Salida: Toyota
# Llamando a métodos públicos
mi_coche.arrancar() # Salida: El coche está arrancando
mi_coche.mostrar_informacion() # Salida: Color: Rojo, Marca: Toyota
# El coche está arrancando
En este ejemplo, color
, marca
y arrancar
son públicos y pueden ser accedidos y modificados desde fuera de la clase Coche
.
Propiedades y métodos privados
A veces, es necesario que ciertas propiedades y métodos solo sean accesibles desde dentro de la clase misma. Para hacer que una propiedad o método sea privados, se utiliza un doble guion bajo (__
) antes del nombre.
Ejemplo:
class Coche:
def __init__(self, color, marca):
self.__color = color # Propiedad privada
self.__marca = marca # Propiedad privada
def __arrancar(self): # Método privado
print("El coche está arrancando")
def mostrar_informacion_privada(self): # Método público que accede a propiedades y métodos privados
print(f"Color: {self.__color}, Marca: {self.__marca}")
self.__arrancar()
Fuera de la clase:
mi_coche = Coche("Azul", "Honda")
# Intentando acceder a propiedades privadas (esto causará un error)
# print(mi_coche.__color) # AttributeError
# print(mi_coche.__marca) # AttributeError
# Intentando llamar a métodos privados (esto causará un error)
# mi_coche.__arrancar() # AttributeError
# Accediendo a través de un método público que maneja elementos privados
mi_coche.mostrar_informacion_privada() # Salida: Color: Azul, Marca: Honda
# El coche está arrancando
En este caso, __color
, __marca
, y __arrancar
no pueden ser accedidos directamente desde fuera de la clase Coche
.
Propiedades y métodos protegidos
Los elementos protegidos son aquellos que no deberían ser accedidos directamente, pero pueden ser utilizados por la clase misma y sus subclases. En python, se indica una propiedad o método protegido con un solo guión bajo (_
).
Ejemplo:
class Coche:
def __init__(self, color, marca):
self._color = color # Propiedad protegida
self._marca = marca # Propiedad protegida
def _arrancar(self): # Método protegido
print("El coche está arrancando")
def mostrar_informacion_protegida(self): # Método público que accede a propiedades y métodos protegidos
print(f"Color: {self._color}, Marca: {self._marca}")
self._arrancar()
Fuera de la Clase
mi_coche = Coche("Verde", "Ford")
# Aunque se puede acceder a propiedades y métodos protegidos, no es una buena práctica
print(mi_coche._color) # Salida: Verde
print(mi_coche._marca) # Salida: Ford
mi_coche._arrancar() # Salida: El coche está arrancando
# La forma recomendada es a través de métodos públicos que gestionan elementos protegidos
mi_coche.mostrar_informacion_protegida() # Salida: Color: Verde, Marca: Ford
# El coche está arrancando
Aquí, _color
, _marca
, y _arrancar
pueden ser utilizados dentro de la clase Coche
y por cualquier clase que herede de Coche
.
¿Por Qué Usar Propiedades y Métodos Privados y Protegidos?
Utilizar propiedades y métodos privados y protegidos ayuda a mantener la integridad de los datos y la encapsulación. Esto significa que puedes controlar mejor cómo se accede y se modifica la información de tus objetos, previniendo cambios inesperados y errores en tu programa.
Conclusión
Entender las propiedades y métodos públicos, privados y protegidos en Python (o cualquier otro lenguaje) es esencial para cualquier programador que quiera escribir código seguro y bien estructurado. Ahora, que sabes cómo y cuándo usar cada tipo, estás un paso más cerca de dominar la Programación Orientada a Objetos y mejorar tus habilidades en programación. ¡Prueba estos conceptos en tu próximo proyecto y observa la diferencia!