La décoration de nom
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compteToutes les questions

Samuel LAMBERT
14 février 2025
Résolue
2 réponses
Accès aux attributs privés en Python : contournement de sécurité ?
Bonjour,
Cette fonctionnalité n'est elle pas contre productive?
Si on a créé une classe avec un attribut privé, l'idée était bien que cet attribut ne soit pas accessible depuis "l'exterieur", python contourne donc une "sécurité"?
J'imagine qu'il y a une raison à autoriser ce contournement mais je ne le vois pas
Samuel
00:00:00 :Quand on crée une classe, il arrive qu'on ait certains attributs qui soient ce qu'on appelle privés.On peut faire ceci en rajoutant deux tirés du bas devant le nom d'un attribut.
00:00:09 :Ici j'ai une classe qui représente un développeur avec un prénom et un nom,et on a également un salaire de base qui est indiqué dans cet attribut salaire qui est précédé de deux tirés du bas.
00:00:19 :Donc si ici j'essaie d'accéder à cet attribut salaire, je ne pourrais pas.Vous allez voir que si je lance le script, on se retrouve avec un attribute error.
00:00:27 :On peut cependant quand même accéder à cet attribut si vraiment vous le souhaitez en dehors de la classegrâce à ce qu'on appelle le name mangling.
00:00:35 :En français on appelle ça la décoration de nom, en anglais name mangling comme ceci.Cette décoration de nom nous permet d'accéder à cet attribut en passant par la classe.
00:00:45 :Pour ça on va mettre un tiré du bas, le nom de la classe et ensuite l'attribut.Dans ce cas-ci les deux tirés du bas et le nom de l'attribut salaire.
00:00:53 :Donc un tiré du bas, le nom de la classe et ensuite l'attribut privé avec les deux tirés du bas devant.Si je sauvegarde et que je relance le script, vous voyez que cette fois-ci on n'a plus cet error d'attribute erroret on a bien la valeur associée à cet attribut.
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.