En python, le mélange de noms est un système par lequel les variables de classe ont des noms différents à l'intérieur et à l'extérieur de la classe. Le programmeur l'"active" en mettant deux traits de soulignement au début du nom de la variable.
Par exemple, je peux définir une classe simple avec quelques membres :
>>> class Foo(object):
... def __init__(self):
... self.x = 3
... self._y = 4
... self.__z = 5
...
Dans la pratique python, un nom de variable commençant par un trait de soulignement est "interne" et ne fait pas partie de l'interface de la classe, et les programmeurs ne doivent donc pas s'y fier. Cependant, il est toujours visible :
>>> f = Foo()
>>> f.x
3
>>> f._y
4
Un nom de variable commençant par deux traits de soulignement est toujours public, mais il est mélangé au nom et donc plus difficile d'accès :
>>> f.__z
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Foo' object has no attribute '__z'
Cependant, si nous savons comment fonctionne la confusion des noms, nous pouvons l'aborder :
>>> f._Foo__z
5
c'est-à-dire que le nom de la classe est ajouté au nom de la variable avec un trait de soulignement supplémentaire.
Python n'a pas de concept de membres "privés" ou "publics" ; tout est public. Le mélange de noms est le signal le plus fort qu'un programmeur puisse envoyer pour indiquer que la variable ne doit pas être accessible depuis l'extérieur de la classe.
3 votes
Les noms mélangés ont joué un rôle dans l'histoire du "cheval de Troie" du C++, voir : ejohnson.blogs.com/software/2004/11/i_find_c_intere.html
1 votes
@harpo : intéressant, mais un peu "dur". Je veux dire, ce qui est dit est une conséquence des nouvelles fonctionnalités. Je ne pense pas que cela puisse être considéré comme intentionnel, quelles que soient les circonstances.