Python ne supporte pas directement la confidentialité . Le programmeur doit savoir quand il est sûr de modifier un attribut de l'extérieur, mais de toute façon, avec Python, vous pouvez réaliser quelque chose comme la confidentialité avec de petites astuces. Voyons maintenant si une personne peut mettre quelque chose de privé ou non.
class Person(object):
def __priva(self):
print "I am Private"
def publ(self):
print " I am public"
def callpriva(self):
self.__priva()
Maintenant, quand nous allons exécuter :
\>>> p = Person()
>>> p.publ()
I am public
>>> p.\_\_priva()
Traceback (most recent call last):
File "", line 1, in
p.\_\_priva()
AttributeError: 'Person' object has no attribute '\_\_priva'
#Explanation : You can see here we are not able to fetch that private method directly.
>>> p.callpriva()
I am Private
#Explanation : Here we can access private method inside class
Alors comment quelqu'un peut accéder à cette variable ?
Vous pouvez faire comme :
\>>> p.\_Person\_\_priva
I am Private
wow , en fait si python reçoit toutes les variables commençant par un double soulignement sont "traduites" en ajoutant un simple soulignement et le nom de la classe au début :
Note : Si vous ne voulez pas que ce nom change mais que vous voulez quand même envoyer un signal pour que les autres objets restent à l'écart, vous pouvez utiliser un seul trait de soulignement initial les noms avec un trait de soulignement initial ne sont pas importés avec les importations étoilées (from module import *)
Exemple :
#test.py
def hello():
print "hello"
def _hello():
print "Hello private"
#----------------------
#test2.py
from test import *
print hello()
print _hello()
sortie-->
hello
Traceback (most recent call last):
File "", line 1, in
NameError: name '\_hello' is not defined
Maintenant si nous appelons _hello manuellement .
#test2.py
from test import _hello , hello
print hello()
print _hello()
sortie-->
hello
hello private
Enfin : Python ne dispose pas vraiment d'un support équivalent pour la confidentialité, bien que les initiales simples et le double soulignement initial donnent, dans une certaine mesure, deux niveaux de confidentialité.
2 votes
Pour ceux qui se posent la question : Guido van Rossum vient d'expliquer l'absence de "vraies" variables privées en Python : plus.google.com/115212051037621986145/posts/7wpbQTPRWft En bref : Parce que l'aspect pratique bat la pureté
0 votes
Voir aussi : Quelle est la signification du simple et du double soulignement devant un nom d'objet ?