POO en Python: clases, objetos y encapsulación orientada al dominio

Aprende a modelar entidades de negocio con clases, atributos y métodos, evitando clases anémicas y mejorando cohesión.

La POO en Python sirve para modelar comportamientos del dominio, no para crear jerarquías por moda.

Una clase agrupa estado (atributos) y comportamiento (métodos) con una responsabilidad clara.

El constructor `__init__` define cómo nace un objeto válido; si permites estados inválidos, aparecerán bugs río abajo.

Encapsular reglas dentro de métodos evita lógica dispersa y facilita mantenimiento del sistema.

  • La clase describe el modelo; el objeto representa un caso concreto de ese modelo.
  • `class Cuenta:` define estructura y reglas comunes. `cuenta_ana = Cuenta(...)` crea una instancia con estado propio.
  • Dos objetos de la misma clase comparten comportamiento, pero no necesariamente valores de atributos.
  • Piensa primero qué invariantes debe respetar la entidad antes de escribir métodos.
  • Los métodos deben hacer cumplir reglas del negocio, no solo modificar atributos sin control.

1) Clase vs objeto: plano y instancia

La clase describe el modelo; el objeto representa un caso concreto de ese modelo.

`class Cuenta:` define estructura y reglas comunes. `cuenta_ana = Cuenta(...)` crea una instancia con estado propio.

Dos objetos de la misma clase comparten comportamiento, pero no necesariamente valores de atributos.

Piensa primero qué invariantes debe respetar la entidad antes de escribir métodos.

2) Encapsulación: proteger reglas dentro de métodos

Los métodos deben hacer cumplir reglas del negocio, no solo modificar atributos sin control.

Si cualquier parte del sistema puede cambiar `saldo` directamente, se rompe la consistencia del dominio.

Métodos como `depositar` o `retirar` son puntos de control para validar entradas.

La encapsulación reduce errores y hace más explícitas las operaciones permitidas.

  • Valida reglas dentro de métodos, no fuera.
  • Evita estados imposibles desde el constructor.
  • Mantén métodos cortos y orientados al dominio.
  • Lanza excepciones claras en violaciones de regla.

3) Métodos especiales útiles (`__repr__`, `__str__`)

Representaciones legibles facilitan debugging y logging.

`__repr__` debería describir el objeto de forma útil para desarrolladores.

`__str__` puede orientarse más a salida amigable para usuario/CLI.

Una buena representación acelera diagnóstico cuando inspeccionas objetos en logs o consola.

Python
13

POO en Python: clases, objetos y encapsulación orientada al dominio

Aprende a modelar entidades de negocio con clases, atributos y métodos, evitando clases anémicas y mejorando cohesión.

Código del tema: class Usuario: pass

📘 Teoría

1) Clase vs objeto: plano y instancia

La clase describe el modelo; el objeto representa un caso concreto de ese modelo.

1

`class Cuenta:` define estructura y reglas comunes. `cuenta_ana = Cuenta(...)` crea una instancia con estado propio.

2

Dos objetos de la misma clase comparten comportamiento, pero no necesariamente valores de atributos.

3

Piensa primero qué invariantes debe respetar la entidad antes de escribir métodos.

2) Encapsulación: proteger reglas dentro de métodos

Los métodos deben hacer cumplir reglas del negocio, no solo modificar atributos sin control.

Si cualquier parte del sistema puede cambiar `saldo` directamente, se rompe la consistencia del dominio.

Métodos como `depositar` o `retirar` son puntos de control para validar entradas.

La encapsulación reduce errores y hace más explícitas las operaciones permitidas.

  • Valida reglas dentro de métodos, no fuera.
  • Evita estados imposibles desde el constructor.
  • Mantén métodos cortos y orientados al dominio.
  • Lanza excepciones claras en violaciones de regla.

3) Métodos especiales útiles (`__repr__`, `__str__`)

Representaciones legibles facilitan debugging y logging.

1

`__repr__` debería describir el objeto de forma útil para desarrolladores.

2

`__str__` puede orientarse más a salida amigable para usuario/CLI.

3

Una buena representación acelera diagnóstico cuando inspeccionas objetos en logs o consola.

🧪 Aprende probando

Ejemplo Ejemplo: cuenta bancaria con operaciones controladas Entidad de dominio con invariantes y métodos de negocio explícitos.

🏁 Retos

Reto Reto: añade método `retirar` Implementa una operación de dominio que descuente saldo.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre Python.

Test de Python

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com