Saltar al contenido principal
Conceptos básicos de Python2026-07-29 · 12 min de lectura

Clases y objetos de Python: el tutorial de 2026

La mayoría de los tutoriales de programación orientada a objetos de Python enseñan la sintaxis y omiten el modelo mental. Éste hace lo contrario: saldrá con una idea clara de lo que es una clase en tiempo de ejecución, cuándo buscar @dataclass en lugar de escribir __init__ a mano y cómo funciona realmente self (no es mágico).

Cubriremos: la clase viable mínima de cuatro líneas, por qué self es un parámetro, atributos de clase versus instancia (el error número uno para principiantes), los seis métodos dunder que verá en todas partes, @dataclass como el valor predeterminado moderno y una regla estricta sobre cuándo dejar las clases en paz y usar una función simple.

El modelo mental: una clase es una fábrica

Una clase en Python es una fábrica que produce objetos. Cada vez que llamas a Rect(3, 4), Python crea un objeto nuevo con su propio almacenamiento y te lo devuelve.

▶ PYTHONeditable · runs in your browser

Esa es toda la mecánica. La clase es el modelo; cada llamada Rect(...) es un sello del plano en la RAM nueva.

self es solo un parámetro

La confusión número uno para las personas que vienen de JS o Ruby: "self" en Python es explícito. El primer parámetro de cada método es una referencia a la instancia que se llama.

▶ PYTHONeditable · runs in your browser

Entonces c.bump() es azúcar sintáctico para Counter.bump(c). Python pasa la instancia como primer argumento. Podrías llamarlo "yo", "esto" o "foo". "yo" es una convención, no una palabra clave. Quédese con self (PEP 8) para que otros desarrolladores de Python puedan leer su código.

La trampa del atributo clase vs instancia

El error de programación orientada a objetos de Python más común en un código base para principiantes:

▶ PYTHONeditable · runs in your browser

items = [] en el alcance de la clase crea UNA lista compartida por cada instancia. a.add("milk") lo muta, por lo que b.items ve la misma lista.

Regla: inicializa el estado mutable en `__init__`, no en el ámbito de la clase.

▶ PYTHONeditable · runs in your browser

Este error se envió a producción más veces de lo que admitiría cualquier desarrollador de Python. Esté atento a listas, dictados y conjuntos en el ámbito de la clase.

Los seis métodos que verás en todas partes

Los métodos de Dunder (__name__) son ganchos de sobrecarga de operadores de Python. Estos seis cubren el 95% de lo que encontrarás:

1. __init__(self, ...) — constructor

Se ejecuta cuando se crea el objeto. Establezca aquí los atributos de la instancia. No devuelva nada (Python aplica "Ninguno").

2. __repr__(self) — cadena orientada al desarrollador

Llamado por print(x) si falta __str__, y siempre por REPL. Apunta a algo que puedas volver a pegar en Python para recrear el objeto:

▶ PYTHONeditable · runs in your browser

3. __eq__(self, other) - igualdad

Sin él, Rect(3, 4) == Rect(3, 4) devuelve False (el valor predeterminado es identidad). Comparar campo por campo:

▶ PYTHONeditable · runs in your browser

4. __hash__(self) - capacidad de hash

Si anula __eq__, DEBE anular también __hash__ o los conjuntos de Python __hash__ = None (el objeto se vuelve no modificable). Lo más simple: return hash((self.width, self.height)).

5. __len__(self) — para len(obj)

Hace que len(cart) == 5 funcione.

6. __iter__(self) — para para x en obj:

Devuelve un iterador. yield dentro hace que la clase sea iterable:

▶ PYTHONeditable · runs in your browser

@dataclass: el valor predeterminado moderno

Si su clase es principalmente un titular de datos (tres campos, un __init__, un __repr__, un __eq__), deje de escribir ese texto estándar. @dataclass lo genera todo a partir de sus anotaciones de tipo:

▶ PYTHONeditable · runs in your browser

Eso es __init__, __repr__ y __eq__, todos generados. Agregue @dataclass(frozen=True) para hacer que el objeto sea inmutable Y obtener __hash__ gratis.

Regla: busque `@dataclass` primero. Escriba una clase creada manualmente solo cuando necesite métodos que no sean descriptores de acceso a atributos.

__slots__ — optimización de memoria (avanzada)

De forma predeterminada, cada instancia lleva un __dict__ para que pueda agregar atributos arbitrarios. __slots__ intercambia ese dictado por una estructura fija de nivel C: huella de RAM más pequeña y acceso a atributos más rápido:

▶ PYTHONeditable · runs in your browser

Utilice __slots__ cuando: (a) esté creando millones de instancias y la RAM sea importante, o (b) desee detectar errores tipográficos en la asignación de atributos en tiempo de ejecución. De lo contrario, omítalo: deshabilita pickle de forma predeterminada y rompe la herencia múltiple de manera sutil.

Cuándo dejar las clases en paz

Regla estricta: si su clase tiene UN método más `__init__`, probablemente debería ser una función.

▶ PYTHONeditable · runs in your browser

Las clases ganan peso cuando mantienen state en múltiples llamadas a métodos, o cuando implementan un protocolo bien definido (__iter__, __enter__, __eq__, etc.). La lógica de un solo uso es una función.

Herencia: úsala con moderación

La herencia es real pero se utiliza en exceso. En Python 2026, prefiera composición: mantenga otro objeto como atributo en lugar de heredar de él:

▶ PYTHONeditable · runs in your browser

Herede sólo cuando tenga una relación genuina "es-un" Y desee anular el comportamiento. Un NamedRect que hereda de Rect para agregar un campo name está bien. Construir una jerarquía de herencia de cinco niveles para una clase de lógica empresarial es un código que desenredará en 6 meses.


Las clases son una de las características más poderosas de Python y una de las más fáciles de usar en exceso. El modelo mental que ayuda: una clase es una fábrica de objetos, self es un parámetro simple, el estado mutable va en __init__, busca @dataclass primero y regresa a una función siempre que la clase tenga menos de dos métodos portadores de estado.

Siguiente paso: 30 lecciones prácticas de programación orientada a objetos que cubren clases, @dataclass, herencia versus composición y los métodos dunder, con Python real ejecutándose en su navegador y un mentor de IA en cada paso.

¿Listo para probarlo?

15 lecciones gratis después de un registro gratuito, sin tarjeta. Pruebe la plataforma y luego decida.

Empieza gratis →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.