Domine __slots__ en clases Python: optimice memoria y velocidad

Los __slots__ en clases Python son una característica que no muchos programadores conocen. En una clase con slots definimos explícitamente los campos que nuestra clase puede tener usando el nombre mágico __slots__. Esto tiene algunas ventajas:
- Los objetos creados desde la clase ocuparán ligeramente menos memoria.
- Es más rápido acceder a atributos de la clase.
- No puedes añadir aleatoriamente nuevos atributos a objetos de una clase con slots.
Aquí tienes un ejemplo de cómo definir una clase con slots:
>>> class Card:
... __slots__ = 'rank', 'suite'
... def __init__(self, rank, suite):
... self.rank = rank
... self.suite = suite
...
>>> qh = Card('queen', 'hearts')
Para mí, la mayor ventaja es que no puedes añadir aleatoriamente nuevos atributos a una clase con slots. ¡Puede prevenir errores costosos! Para demostrar: un error tipográfico al asignar un atributo a una clase con slots lanzará un error en lugar de que Python cree silenciosamente un nuevo atributo.
Para clases pequeñas sin herencia compleja, usar slots puede ser una ventaja. Especialmente cuando necesitas crear muchas instancias de dicha clase, el ahorro en memoria y el acceso más rápido a atributos pueden marcar la diferencia.
Finalmente, solo para que lo sepas, ¡puedes combinar esta técnica con data classes también!
python
- Dominando tipos de datos en Python: Guía práctica
- Dominando operadores en Python: Guía completa
- Dominando la sentencia pass en Python: Guía práctica
- Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
- Dominando Diccionarios en Python: Creación, Manipulación y Técnicas Avanzadas
- Dominando Excepciones Personalizadas en Python: Guía Práctica
- Dominando la Programación Orientada a Objetos en Python: Clases, Herencia, Encapsulación y Polimorfismo
- Dominando la Herencia en Python: Conceptos, Sintaxis y Ejemplos Prácticos
- Dominando Iteradores en Python: Cómo Funcionan y Cómo Crear los Tuyos
- Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables
- Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias