Hasta ahora organizaste tu código en funciones. El siguiente paso es organizar datos y comportamiento juntos, dentro de una misma unidad: eso es una clase. Esta guía es un mapa, no una lista de secciones: hacé clic en cualquier nodo, en el orden que prefieras. El recomendado es 1→7, pero no está bloqueado.
💻 Los nodos con ✍️ tienen un editor real (Pyodide, Python de verdad en tu navegador). Un nodo se pinta de verde en el mapa cuando ya lo practicaste.
0 / 0
preguntas y ejercicios enviados
RC
Ing. Roy Carrasco Facultad de Ingeniería de Sistemas · UAB · 👁 — vistas
🗺️ Tocá un nodo para abrirlo. Las líneas punteadas muestran el orden sugerido, pero podés saltar a cualquiera.
1 · Clase
Hasta ahora, cada dato de tu programa vivía en una variable suelta y cada acción en una función suelta. Una clase es un molde que agrupa datos y comportamiento relacionados bajo un mismo nombre: define, de una vez, cómo va a ser cualquier cosa de ese tipo que crees más adelante.
Python
class Perro:
especie = "Canino"
print(Perro)
print(Perro.especie)
✍️ Tu turno: escribe el código y ejecútalo
Salida
class, no def
Una clase se define con la palabra clave class, seguida del nombre y dos puntos —el bloque de adentro va indentado, igual que en una función. La convención de nombres es distinta: las clases se escriben en PascalCase (Perro, CuentaBancaria), con mayúscula inicial y sin guiones bajos, para distinguirlas a simple vista de funciones y variables (snake_case).
Por ahora Perro es solo el molde: todavía no creaste ningún perro concreto. Eso es lo que viene en el siguiente nodo.
2 · Objeto
Un objeto es una instancia concreta de una clase: se crea escribiendo el nombre de la clase seguido de paréntesis, como si la clase fuera una función que "fabrica" objetos. Podés crear tantos objetos como quieras a partir de la misma clase.
Python
class Perro:
especie = "Canino"
rex = Perro()
firulais = Perro()
print(rex.especie)
print(firulais.especie)
print(type(rex))
✍️ Tu turno: escribe el código y ejecútalo
Salida
rex y firulais son objetos distintos
Aunque los dos vienen de la misma clase Perro y comparten el mismo especie, rex y firulais son dos objetos separados en la memoria de la computadora —cambiar uno no afecta al otro. En el nodo "Atributos" vas a ver por qué eso importa de verdad.
3 · Atributos
Un atributo es un dato que pertenece a un objeto en particular, no a la clase entera. Se asigna con objeto.atributo = valor, y cada objeto guarda el suyo por separado.
Python
class Perro:
pass
rex = Perro()
rex.edad = 3
firulais = Perro()
firulais.edad = 7
print(rex.edad)
print(firulais.edad)
✍️ Tu turno: escribe el código y ejecútalo
Salida
🔬 Probalo vos mismo: cada objeto guarda su propio estado
Cambiá los números de abajo. Son dos objetos Perro distintos, cada uno con su propio edad —modificar uno nunca toca al otro:
Si rex.edad vale años y firulais.edad vale años, entonces firulais le lleva 4 años a rex, y en total entre los dos suman 10 años de perro.
Esto ya funciona, pero escribir rex.edad = 3 a mano después de crear cada objeto es repetitivo y fácil de olvidar. El próximo nodo resuelve exactamente ese problema.
4 · __init__ y self
El método __init__ (dos guiones bajos a cada lado) se ejecuta automáticamente apenas creás un objeto, y sirve para inicializar sus atributos de una sola vez. Su primer parámetro siempre es self: una referencia a "este objeto en particular" que Python pasa solo, sin que vos lo escribas al llamar.
Python
class Perro:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
rex = Perro("Rex", 3)
firulais = Perro("Firulais", 7)
print(rex.nombre, rex.edad)
print(firulais.nombre, firulais.edad)
✍️ Tu turno: escribe el código y ejecútalo
Salida
self no lo escribís vos al llamar
Perro("Rex", 3) tiene dos argumentos, pero __init__ recibe tres parámetros (self, nombre, edad). Python completa self automáticamente con el objeto recién creado —por eso nunca aparece en la llamada, solo en la definición. Esta misma regla vale para cualquier método de la clase, no solo __init__, como vas a ver en el próximo nodo.
5 · Métodos
Un método es una función definida dentro de una clase, que usa self para leer o modificar los atributos de ese objeto en particular. Se define igual que una función (def), y se llama con objeto.metodo(...) en vez de nombre_funcion(...).
Un atributo es un dato (self.nombre, un texto); un método es una acción (ladrar(), algo que el objeto hace, definido con def dentro de la clase). cumplir_anios muestra que un método puede leer y modificar un atributo del mismo objeto usando self.
6 · Instancias múltiples
Cerremos el círculo con varios objetos a la vez: cada uno guarda su propio estado (atributos) y responde a los mismos métodos, sin pisarse entre sí.
¿Cuál de estas frases describe mejor la relación entre Perro (la clase) y rex (creado con Perro())?
Selección múltiple
En la clase Perro, self.nombre es un atributo y ladrar(self) es un método. ¿Qué distingue a ambos?
7 · Repaso rápido
Repasemos los seis conceptos del mapa, todos en un mismo ejemplo:
Concepto
En este ejemplo
Clase
class Perro: — el molde
Objeto
rex = Perro("Rex", 3) — una instancia concreta
Atributo
self.nombre, self.edad — datos propios de cada objeto
Constructor
__init__(self, nombre, edad) — se ejecuta al crear el objeto
self
referencia a "este objeto"; Python lo pasa solo
Método
ladrar(self) — una acción del objeto
La idea central
Antes tenías datos (variables) y comportamiento (funciones) por separado. Una clase los junta: cada objeto que crees lleva consigo sus propios datos, y sabe qué hacer con ellos. Esa combinación —estado propio + comportamiento propio— es la base de todo lo que viene después en Programación Orientada a Objetos.
Cuando te sientas listo, cerrá este mapa y bajá al Reto Final para poner todo junto.
Reto Final
Antes de escribir una clase de cero, ordená esta: alguien mezcló las líneas de una clase Auto.
Ordená el código
Usá las flechas ↑ ↓ de cada bloque hasta dejar la clase en el orden correcto, y después presioná "Verificar orden".
self.marca = marca
class Auto:
def arrancar(self):
def __init__(self, marca, modelo):
self.modelo = modelo
print(self.marca, "está arrancando")
Ahora escribí una clase parecida, de cero:
Clase Persona
__init__(self, nombre, edad) que guarde ambos como atributos.
Un método saludar(self) que imprima "Hola, soy " + self.nombre.
Un método cumplir_anios(self) que le sume 1 a self.edad.
Creá un objeto y probá los dos métodos, imprimiendo la edad antes y después.
🏆 Resuelve aquí el reto
Salida
Cheat Sheet
Uso
Ejemplo
Definir una clase
class Nombre: ...
Crear un objeto
objeto = Nombre(argumentos)
Constructor
def __init__(self, ...): ...
Guardar un atributo
self.atributo = valor
Leer un atributo
objeto.atributo
Definir un método
def nombre_metodo(self, ...): ...
Llamar un método
objeto.nombre_metodo(argumentos)
self
Primer parámetro de todo método; Python lo pasa solo
¿Sabías que...?
🏛️ De dónde viene la idea
Los conceptos de "clase" y "objeto" nacieron en Simula 67, un lenguaje noruego pensado para simulaciones, décadas antes de que la Programación Orientada a Objetos se volviera popular.
🧬 En Python, todo es un objeto
Un número, un texto o una lista también son instancias de una clase (int, str, list), aunque nunca hayas escrito class para usarlos.
🔒 Atributos "privados" (más adelante)
Anteponer _ o __ al nombre de un atributo es una convención para señalar "no lo toques desde afuera" —el tema de encapsulación de una guía futura.