Logo de fravelz

Notas de Hacking

Fravelz

Variables protegidas y privadas en clases


1. self._variable (un guion bajo) {#self._variable-un-guion-bajo}

Por convención, el guion bajo simple _ indica que el atributo es “protegido” (protected), o sea:

“No lo uses directamente fuera de la clase, aunque *puedes- hacerlo sí realmente quieres”.
Python **no bloquea** su acceso; es solo una **advertencia entre programadores**. ```python class Persona: def __init__(self, nombre): self._nombre = nombre # protegido

p = Persona(“Ana”) print(p._nombre) # 😅 Funciona, pero no deberías accederlo así


---

## 2. self.__variable (doble guion bajo) {#self.__variable-doble-guion-bajo}
El **doble guion bajo __** activa el mecanismo de **name mangling** o “ofuscación de nombre”.

Eso significa que Python **cambia internamente el nombre del atributo** para evitar que se sobrescriba o se acceda fácilmente desde fuera de la clase.

Por ejemplo:
```python
class Persona:
def __init__(self, nombre):
self.__nombre = nombre  # privado (name mangling)

p = Persona("Luis")

print(p.__nombre)  # ❌ Error: AttributeError

Pero internamente Python lo guarda así

print(p._Persona__nombre)  # ✅ Luis

En otras palabras:

  • No lo vuelve totalmente privado, pero dificulta su acceso externo.
  • Se usa para evitar colisiones de nombres en clases hijas (herencia) y proteger la integridad interna.

En resumen {#en-resumen}