Aprende Python · lección gratuita

Lección 25 · Clases y objetos

Resumen

Hasta ahora has usado tipos que Python ya trae (int, str, list, dict). Una clase te permite crear tus propios tipos: un molde que describe qué datos guarda y qué puede hacer un objeto. Un objeto (o instancia) es algo concreto creado a partir de ese molde. Por ejemplo, la clase Perro es el molde y mi_perro es un objeto creado con ese molde.

Conceptos

Una clase se define con la palabra clave class seguida del nombre. Dentro defines el método especial __init__, que Python llama solo al crear el objeto. Su primer parámetro siempre es self: una referencia al objeto que se está construyendo. Dentro de __init__ asignas los atributos de instancia con self.nombre = valor, de modo que cada objeto los lleve consigo.

Cuando escribes p = Persona("Ana", 30), Python crea un objeto vacío, lo pasa como self y ejecuta __init__ con los argumentos "Ana" y 30. Después puedes leer sus datos con la notación de punto: p.nombre y p.edad.

class Persona:
    def __init__(self, nombre, edad):
        self.nombre = nombre   # atributo de instancia
        self.edad = edad       # atributo de instancia

p = Persona("Ana", 30)         # crear un objeto
print(p.nombre)                # Ana
print(p.edad)                  # 30

Cada objeto es independiente: si creas Persona("Luis", 25), sus atributos no afectan a los de Ana. Así modelas muchas entidades distintas con un mismo molde.

Ejemplos

# 1) Clase simple con un atributo
class Punto:
    def __init__(self, x, y):
        self.x = x
        self.y = y

a = Punto(2, 5)
print(a.x, a.y)          # 2 5

# 2) Dos objetos independientes
class Gato:
    def __init__(self, nombre):
        self.nombre = nombre

g1 = Gato("Michi")
g2 = Gato("Tom")
print(g1.nombre)         # Michi
print(g2.nombre)         # Tom

# 3) Usar atributos en operaciones
class Rectangulo:
    def __init__(self, ancho, alto):
        self.ancho = ancho
        self.alto = alto

r = Rectangulo(4, 3)
area = r.ancho * r.alto
print(area)              # 12

# 4) Valor calculado en el constructor
class Producto:
    def __init__(self, precio):
        self.precio = precio
        self.con_iva = precio * 1.18

prod = Producto(100)
print(prod.con_iva)      # 118.0
💡 Recuerda siempre self. Olvidar self como primer parámetro de __init__, o escribir nombre = en vez de self.nombre =, es el error más común al empezar con clases.

Cheatsheet

AcciónSintaxis
Definir claseclass Coche:
Constructordef __init__(self, ...):
Guardar atributoself.color = color
Crear objetoc = Coche("rojo")
Leer atributoc.color
Modificar atributoc.color = "azul"
Convención de nombreCamelCase para clases

---

← Manejo de errores: try/exceptMétodos y self →

Ver todas las lecciones de Aprende Python →