Puedes ejecutar cualquier ejemplo de esta guía directamente en nuestra consola interactiva: Abrir consola de Python →
Métodos especiales en Python: cómo funcionan los métodos mágicos
Los métodos especiales, también llamados métodos mágicos, permiten que tus clases se comporten como tipos nativos de Python. En esta guía aprenderás a usar métodos como __init__, __str__, __len__, __add__ y más.
Tabla de contenidos
1. ¿Qué son los métodos especiales?
Son métodos que comienzan y terminan con doble guion bajo. Python los usa para operaciones internas como imprimir, sumar, comparar o convertir objetos.
class Persona:
def __init__(self, nombre):
self.nombre = nombre
2. __str__ y __repr__
Controlan cómo se muestra un objeto cuando se imprime.
class Persona:
def __init__(self, nombre):
self.nombre = nombre
def __str__(self):
return f"Persona: {self.nombre}"
p = Persona("Iokelu")
print(p)
3. __len__
Permite usar la función len() en tus objetos.
class Grupo:
def __init__(self, personas):
self.personas = personas
def __len__(self):
return len(self.personas)
g = Grupo(["Ana", "Luis", "Iokelu"])
print(len(g))
4. __add__
Permite usar el operador + entre objetos.
class Numero:
def __init__(self, valor):
self.valor = valor
def __add__(self, otro):
return Numero(self.valor + otro.valor)
a = Numero(5)
b = Numero(7)
c = a + b
print(c.valor)
5. Métodos de comparación
- __eq__: igual a
- __lt__: menor que
- __gt__: mayor que
class Persona:
def __init__(self, edad):
self.edad = edad
def __lt__(self, otro):
return self.edad < otro.edad
6. Ejercicios
- Crear una clase con __str__.
- Crear una clase con __len__.
- Crear una clase con __add__.
- Crear una clase con __eq__.
- Crear una clase con varios métodos mágicos.
class Persona:
def __str__(self):
return "Persona"
class Grupo:
def __len__(self):
return 5
class Numero:
def __add__(self, otro):
return Numero(10)
class Persona:
def __eq__(self, otro):
return True
class Ejemplo:
def __str__(self): return "Hola"
def __len__(self): return 3
7. Mini‑proyecto: Clase avanzada con métodos mágicos
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
def __add__(self, otro):
return Vector(self.x + otro.x, self.y + otro.y)
v1 = Vector(2, 3)
v2 = Vector(4, 1)
print(v1 + v2)
8. Preguntas frecuentes
¿Debo usar métodos mágicos siempre?
Solo cuando quieras que tu clase se comporte como un tipo nativo.
¿Puedo crear mis propios métodos mágicos?
No, solo puedes usar los que Python define.