Maîtriser les __slots__ de classes Python : optimiser mémoire et vitesse

Les __slots__ de classes Python sont une fonctionnalité que peu de programmeurs connaissent. Dans une classe « slotted », on définit explicitement les champs autorisés via l'attribut magique __slots__. Avantages :
- Objets créés prennent légèrement moins de mémoire
- Accès attributs plus rapide
- Impossible d'ajouter aléatoirement nouveaux attributs aux objets d'une classe slotted
Exemple définition classe slotted :
>>> class Card:
... __slots__ = 'rank', 'suite'
... def __init__(self, rank, suite):
... self.rank = rank
... self.suite = suite
...
>>> qh = Card('queen', 'hearts')
Pour moi, le plus grand avantage : impossible d'ajouter attributs aléatoirement. Ça évite erreurs coûteuses ! Démonstration : faute de frappe en assignant attribut à classe slotted = erreur levée au lieu que Python crée silencieusement nouvel attribut.
Pour petites classes sans héritage complexe, slots = avantage. Surtout si beaucoup d'instances : économies mémoire et accès attributs plus rapide font différence.
Enfin, sachez qu'on peut combiner cette technique avec les classes de données (dataclasses) !
Python
- Maîtriser les types de données Python : Guide pratique
- Maîtriser les opérateurs Python : Guide complet
- Maîtriser l'instruction pass en Python : Guide pratique
- Maîtriser les arguments de fonctions Python : Positionnels, nommés et paramètres par défaut
- Maîtriser les dictionnaires Python : création, manipulation et techniques avancées
- Maîtriser les exceptions personnalisées Python : guide pratique
- Maîtriser la programmation orientée objet Python : classes, héritage, encapsulation et polymorphisme
- Maîtriser les itérateurs Python : fonctionnement et création des vôtres
- Les fermetures Python expliquées : comment les fonctions imbriquées capturent les variables