17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

118<br />

Éléments du langage<br />

DEUXIÈME PARTIE<br />

Protection d’attributs<br />

>>> class Car:<br />

... __defaults = ['bruyante']<br />

... qualities = ['rapide', 'economique']<br />

... def caracteristics(self):<br />

... print(self.__defauts)<br />

... print(self.qualites)<br />

... def visibility(self):<br />

... print(dir(self))<br />

...<br />

>>> o = Car()<br />

>>> o.caracteristics()<br />

['bruyante']<br />

['rapide', 'economique']<br />

>>> o.qualities<br />

['rapide', 'economique']<br />

>>> o.__defaults<br />

Traceback (most recent call last):<br />

File "", line 1, in ?<br />

AttributeError: Voiture instance has no attribute '__defaut'<br />

>>> o.visibility()<br />

['_Car__defaults', '__doc__', '__module__', 'caracteristiques',<br />

'qualites', 'visibilite']<br />

>>> o._Car__defaults<br />

['bruyante']<br />

Contrairement à d’autres langages objets, cette protection reste déclarative et n’est<br />

pas absolue : il est tout à fait possible d’accéder à un attribut privé en faisant appel à<br />

son nom préfixé, même si cela n’a aucun intérêt.<br />

À RETENIR Nom des attributs privés<br />

Le nom des attributs privés est tronqué à 255 caractères par l’interpréteur<br />

Appelée name mangling, cette mécanique permet d’éviter les collisions de noms dans<br />

des cas précis au niveau du code de l’interpréteur lui-même. Cependant son utilisation<br />

est à proscrire dans les programmes simples, car il n’y a pas réellement d’intérêt<br />

de marquer ainsi ses attributs dans un langage qui prône les conventions sur les noms<br />

des éléments au lieu de forcer certains mécanismes. Quoi qu’il en soit, lorsque des<br />

attributs doivent être marqués comme privés, la meilleure pratique est de les préfixer<br />

par un seul espace souligné.<br />

FUTUR Retrait du name mangling ?<br />

Le retrait pur et simple du name mangling a été proposé dans le passé, les prochaines versions de<br />

Python ne l’auront peut-être plus.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!