Conceptos Básicos de Python: Programación Orientada a Objetos (OOP)
Métodos y Variables Privadas
Lesson 5 of 7 • 10 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
En la Programación Orientada a Objetos, no todos los datos y métodos están destinados a ser accedidos directamente desde fuera de la clase. A veces quieres ocultar detalles internos para que solo puedan ser usados dentro de la propia clase.
En Python, puedes indicar que un atributo o método es privado comenzando su nombre con dos guiones bajos (__).
Aunque esto no lo hace completamente inaccesible, activa una característica llamada name mangling (modificación del nombre), que cambia internamente el nombre del atributo para que sea más difícil acceder a él desde fuera.
¿Por qué usar miembros privados?
Los atributos y métodos privados:
- Ayudan a proteger los datos para que no sean modificados accidentalmente.
- Dejan claro qué partes de tu clase son internas y no deberían ser usadas por código externo.
- Te permiten cambiar la implementación interna sin romper otro código que usa tu clase.
IMPORTANTE: La privacidad en Python es por convención, no por fuerza. Los miembros privados aún pueden ser accedidos si alguien realmente lo intenta, pero la intención es que no se haga.
Ejemplo: Una clase Person
class Person:
def __init__(self, name, age):
self.name = name # Atributo público
self.__age = age # Atributo privado
def print_name(self):
print("Name:", self.name)
def print_info(self):
self.print_name()
self.__print_age() # Llamando método privado desde dentro de la clase
def __print_age(self): # Método privado
print("Age:", self.__age)
p = Person("John", 30)
p.print_name() # Funciona: Name: John
p.print_info() # Funciona: Name: John Age: 30
¿Qué pasa si intentas acceder a un atributo privado?
Si intentas acceder a un miembro privado directamente desde fuera de la clase, recibirás un AttributeError:
p = Person("John", 30)
print(p.__age) # ❌ Esto producirá un error
¿Por qué?
Porque Python cambia automáticamente el nombre __age a _Person__age internamente (name mangling). Esto ayuda a evitar un acceso accidental o conflictos con subclases.
Acceder a datos privados (si realmente debes)
Técnicamente, puedes acceder a miembros privados usando su nombre modificado:
print(p._Person__age) # 30
Pero esto rompe la idea de mantener las cosas privadas — deberías hacer esto solo en casos raros para depuración, no en la lógica normal del programa.
Métodos Privados
Al igual que los atributos, los métodos pueden hacerse privados con dos guiones bajos.
En nuestro ejemplo, __print_age() es privado — no puedes llamarlo desde fuera de la clase:
p.__print_age() # ❌ Esto producirá un error
Pero funciona perfectamente dentro de la clase, como se ve en print_info().
Cuándo usar miembros privados
Usa atributos y métodos privados cuando:
- Quieres evitar el uso accidental de partes internas de tu clase.
- Necesitas controlar cómo se accede o modifica la información (a menudo combinado con métodos getter y setter).
- Estás creando una separación clara entre la API pública de una clase (cosas que deben usarse desde fuera) y sus detalles de implementación.
Resumen
Los miembros privados en Python:
- Comienzan con
__(dos guiones bajos). - Están destinados para uso interno solamente.
- Técnicamente siguen siendo accesibles mediante name mangling, pero debes respetar su privacidad.
Son una señal para otros programadores (y para ti mismo en el futuro) sobre qué es seguro usar y qué es un detalle interno que podrías cambiar sin previo aviso.