Encapsulation en Python
Cours
Fondamentaux
Comprendre l’encapsulation en Python et les conventions pour définir des attributs et méthodes publics et privés.
Encapsulation en Python
L’encapsulation est l’un des principes fondamentaux de la programmation orientée objet. Elle consiste à regrouper les données et les méthodes qui les manipulent au sein d’une même unité (la classe) et à contrôler l’accès à ces données depuis l’extérieur de la classe.
Notion de public et privé en Python
Contrairement à certains langages comme Java ou C++, Python n’a pas de mécanisme strict pour définir des attributs ou des méthodes comme “privés” ou “publics”. Cependant, Python suit une convention basée sur le nommage pour indiquer l’intention du développeur quant à l’utilisation des attributs et méthodes.
- Attributs et méthodes publics :
- Nommés normalement, sans underscore.
- Exemple :
self.attribut
,def methode(self):
- Considérés comme faisant partie de l’interface publique de la classe.
- Attributs et méthodes “privés” (convention) :
- Préfixés par un simple underscore
_
. - Exemple :
self._attribut
,def _methode(self):
- Indique que ces éléments sont destinés à un usage interne et ne devraient pas être accédés directement depuis l’extérieur de la classe.
- Cette convention est basée sur la confiance : techniquement, ces éléments restent accessibles.
- Préfixés par un simple underscore
- Attributs et méthodes “name mangling” :
- Préfixés par un double underscore
__
(sans underscore à la fin). - Exemple :
self.__attribut
,def __methode(self):
- Python applique le “name mangling” : le nom est modifié en interne pour inclure le nom de la classe.
- Rend l’accès depuis l’extérieur plus difficile, mais pas impossible.
- Préfixés par un double underscore
Exemple d’encapsulation en Python
Points importants à retenir :
- L’encapsulation en Python est basée sur des conventions plutôt que sur des restrictions strictes.
- Les attributs et méthodes préfixés par un underscore
_
sont considérés comme internes à la classe. - Le double underscore
__
déclenche le name mangling, rendant l’accès externe plus difficile mais pas impossible. - L’encapsulation est une question de conception et de discipline de programmation en Python.
- Utilisez des méthodes publiques (getters/setters) pour contrôler l’accès aux données internes si nécessaire.
Avantages de l’encapsulation :
- Contrôle de l’accès aux données
- Flexibilité pour modifier l’implémentation interne sans affecter le code qui utilise la classe
- Prévention des modifications accidentelles des données internes
- Clarté du code en distinguant l’interface publique des détails d’implémentation