Métodos Especiales en Python (Programación Orientada a Objetos)
Introducción
Los métodos especiales, también conocidos como métodos mágicos o dunder methods, permiten personalizar el comportamiento de las clases y objetos en Python.
1. Métodos de Inicialización y Construcción
__init__()
- Constructor
class Ejemplo:
def __init__(self, parametro):
# Constructor, se llama al crear un objeto
self.parametro = parametro
__new__()
- Método de Construcción
def __new__(cls, *args, **kwargs):
# Permite modificar la creación de instancias
return super().__new__(cls)
2. Métodos de Representación
__str__()
- Representación para Humanos
def __str__(self):
# Usado por str(), print()
return f"Representación legible"
__repr__()
- Representación para Desarrolladores
def __repr__(self):
# Representación oficial, detallada
return f"Clase(parametro1='valor', parametro2=valor)"
3. Métodos de Comparación
def __eq__(self, otro): # Igualdad (==)
return self.valor == otro.valor
def __lt__(self, otro): # Menor que (<)
return self.valor < otro.valor
def __gt__(self, otro): # Mayor que (>)
return self.valor > otro.valor
4. Métodos Aritméticos
def __add__(self, otro): # Suma (+)
return Clase(self.valor + otro.valor)
def __mul__(self, escalar): # Multiplicación (*)
return Clase(self.valor * escalar)
5. Métodos de Acceso a Elementos
def __getitem__(self, indice):
# Acceso con corchetes []
return self.lista[indice]
def __setitem__(self, indice, valor):
# Asignación con corchetes []
self.lista[indice] = valor
6. Métodos de Contexto
def __enter__(self):
# Al inicio de un bloque with
return self.recurso
def __exit__(self, exc_type, exc_val, exc_tb):
# Al final de un bloque with
self.recurso.close()
7. Métodos de Llamada
def __call__(self, *args, **kwargs):
# Permite llamar a la instancia como función
return self.procesar(*args, **kwargs)
8. Métodos de Longitud y Contenido
def __len__(self):
# Longitud (len())
return len(self.elementos)
def __contains__(self, item):
# Operador 'in'
return item in self.elementos
Otros Métodos Especiales Importantes
__del__()
: Destructor__iter__()
: Hace un objeto iterable__next__()
: Para iteradores__getattr__()
: Manejo de atributos no existentes__hash__()
: Hace un objeto hash (usable en sets)
Conclusión
Los métodos especiales permiten personalizar profundamente el comportamiento de clases en Python, integrándose de manera natural con las características del lenguaje.
Consejos
- Usar con moderación
- Mantener la intuitividad
- Seguir las convenciones de Python