¿Cuál es la razón histórica por la cual Python utiliza el doble guión bajo para los miembros de Class Private?

8

En python se nombra una función o variable privada del módulo _foo. Si es privado para una clase, son nombres __foo. La mecánica detrás de cómo funcionan estos trabajos es diferente, sin embargo, eso es de poca relevancia para la pregunta.

¿Por qué durante el diseño del lenguaje Python se eligieron los caracteres de subrayado doble para los miembros privados de la clase? ¿Por qué no subrayar solo, como para el módulo privado? ¿Por qué no algún otro personaje que sea más visible? (Diferenciar entre _ y __ es difícil).

Estoy seguro de que hay algo de historia aquí, pero tengo problemas para encontrarlo, porque todo lo que encuentro son tutoriales que me dicen lo que significa, en lugar de por qué es así.

Lyndon White
fuente
No estoy interesado en debatir si fue o no una buena opción, solo en conocer la historia.
Lyndon White
1
Los guiones bajos individuales no son específicamente para módulos privados, también se usan para los miembros privados de una clase. La diferencia entre los guiones bajos simples y dobles es solo el cambio de nombre, que a menudo es innecesario o incluso dañino en las clases.
"En python, una función o variable privada del módulo se llama _foo ..." esto está mal: vea aquí python.org/dev/peps/pep-0008/#descriptive-naming-styles . En pocas palabras, los guiones bajos son una convención de raspado, no hacen nada privado (los métodos aún son accesibles desde el exterior).
Gented

Respuestas:

16

La Propuesta de mejora de Python (PEP) 8 explica el significado previsto detrás de los nombres de subrayado simple y doble, entre otras convenciones. Al igual que muchos de los primeros PEP, representa las preferencias de Guido van Rossum, y como el Dictador benévolo para la vida de Python reconoció, sus preferencias generalmente son seguidas por la comunidad de Python.

El uso de guiones bajos dobles para indicar palabras "mágicas" se remonta al menos al preprocesador C, que utilizó esa convención a partir de la década de 1970 ( p . Ej . __FILE__, __LINE__). Lo hizo porque no había símbolos que estuvieran fuera del alcance del preprocesador, por lo que un patrón de nomenclatura rara vez utilizado (múltiples guiones bajos y mayúsculas) prácticamente garantizaba la falta de conflictos.

Ross Patterson
fuente