Conceptos Básicos
# PY-0001: La Diferencia Fundamental: Clases vs. Instancias
### 📋 Metadatos
**ID:** PY-0001
**Tópico Principal:** POO - Clases y Objetos
**Dificultad:** Básico
---
## 1. Código Fuente
```python
class Usuario:
"""
La Clase: Actúa como una PLANTILLA o FÁBRICA para crear objetos.
"""
# Atributo de CLASE: Compartido por todas las instancias.
rol = "Visitante"
def __init__(self, nombre_param):
"""
Método constructor que se llama al crear una INSTANCIA.
"""
# Atributo de INSTANCIA: Único para cada objeto creado.
self.nombre = nombre_param
# --- Ejecución de prueba ---
# 1. Creación de dos INSTANCIAS (Objetos)
usuario1 = Usuario("Alice")
usuario2 = Usuario("Bob")
usuario2.rol = "Administrador" # Modifica el atributo ROL solo para usuario2
# 2. Imprimir Atributos de INSTANCIA (Únicos)
print(f"Nombre de Alice: {usuario1.nombre}")
print(f"Nombre de Bob: {usuario2.nombre}")
print("-" * 20)
# 3. Imprimir Atributos de CLASE (Compartidos y Modificados)
print(f"Rol de Alice (sin modificar): {usuario1.rol}")
print(f"Rol de Bob (modificado): {usuario2.rol}")
print(f"Rol en la CLASE (Plantilla): {Usuario.rol}")
2. Salida Esperada
Nombre de Alice: Alice
Nombre de Bob: Bob
--------------------
Rol de Alice (sin modificar): Visitante
Rol de Bob (modificado): Administrador
Rol en la CLASE (Plantilla): Visitante
3. Análisis Detallado (Conceptos Fundamentales)
¿Qué estamos viendo aquí? (Concepto Central)
Este fragmento establece el pilar de la Programación Orientada a Objetos (POO): la distinción entre una Clase y una Instancia. La Clase (Usuario) es la definición abstracta, como el plano de una casa. La Instancia (usuario1, usuario2) es el objeto concreto creado a partir de ese plano, como la casa física.
Elementos Clave del Código y Conceptos Básicos
class Usuario:: Define la Clase. Es la plantilla que define la estructura.rol = "Visitante": Este es un Atributo de Clase. Su valor pertenece a la plantillaUsuarioy es compartido por todas las instancias a menos que una instancia lo sobreescriba.def __init__(self, nombre_param):: El Constructor. Este método se ejecuta automáticamente cada vez que se crea un nuevo objeto (Instancia) de la clase.self: Es una referencia a la Instancia que se está creando. En Python, debe ser el primer parámetro.
self.nombre = nombre_param: Este es un Atributo de Instancia. El valor ("Alice","Bob") es único para cada objeto.
¿Qué hace este código? (Mecanismo de Ejecución Paso a Paso)
- Línea 18 (
usuario1 = Usuario("Alice")): Se crea el objetousuario1. El constructor__init__se llama, y el atributonombrese establece en"Alice"solo para este objeto. - Línea 19 (
usuario2 = Usuario("Bob")): Se crea el objetousuario2. Su atributonombrees"Bob". - Línea 20 (
usuario2.rol = "Administrador"): Punto Clave. Estamos creando un nuevo atributo llamadoroldirectamente en la instanciausuario2. Esto no modifica elrolde la plantilla (Usuario.rol) ni el deusuario1. - Impresiones Finales:
usuario1.rolmuestra"Visitante"(el valor de la clase, que no fue modificado parausuario1).usuario2.rolmuestra"Administrador"(el valor que se le asignó directamente a la instanciausuario2).Usuario.rolmuestra"Visitante"(prueba que la plantilla, la clase, nunca se alteró).
4. Aplicación Práctica e Ingeniería
Aplicación Práctica (Uso Común)
- Modelado de Datos (Web/APIs): Toda aplicación de backend (como Django o Flask) usa clases para modelar usuarios, productos u órdenes. El atributo de clase puede ser un valor por defecto (
estatus = 'Activo'), y los atributos de instancia son los datos únicos de la base de datos (nombre, ID, fecha de compra). - Diseño de Componentes: Permite crear una estructura base con valores predefinidos que pueden ser sobrescritos por la configuración específica de cada componente (ej.
Componente.velocidad_default = 10y luegomi_componente.velocidad = 5).
Fundamento Teórico
El concepto se relaciona con la Teoría de Conjuntos. La Clase es el conjunto que define las propiedades posibles. La Instancia es un elemento específico de ese conjunto. Un atributo de clase es un parámetro de todo el conjunto, mientras que un atributo de instancia es un valor único para ese elemento individual, lo que permite la herencia y la individualización de datos de manera eficiente en la memoria.
```