Posterior a consultar expertos en el tema, programadores de deferentes ramas y maestros dimos con la respuesta a la interrogande y la compartimos en esta publicación.
Solución:
Respuesta corta: use un solo guión bajo inicial a menos que tenga un De Verdad razón de peso para hacer lo contrario (e incluso entonces piénsalo dos veces).
Respuesta larga:
Un guión bajo significa “este es un detalle de implementación” (attribute, método, función, lo que sea), y es el equivalente Python de “protegido” en Java. Esto es lo que debe usar para los nombres que no forman parte de su API pública de clase/módulo/paquete. Es solo una convención de nomenclatura (bueno, en su mayoría: las importaciones de estrellas las ignorarán, pero no está haciendo importaciones de estrellas en ningún otro lugar que no sea en su shell de Python, ¿verdad?) Por lo que no evitará que nadie acceda a este nombre, pero luego están solos si algo se rompe (vea esto como una “garantía void si no está sellado” tipo de mención).
Dos guiones bajos desencadenan un mecanismo de modificación de nombres. Hay muy pocas razones válidas para usar esto; en realidad, solo se me ocurre una (y que está documentada): proteger un nombre de ser accidentalmente anulada en el contexto de las partes internas de un marco complejo. Como ejemplo, podría haber alrededor de media docena o menos de instancias de este esquema de nombres en todo el código base de django (principalmente en el paquete django.utils.funcional).
En lo que a mí respecta, debo haber usado esta función quizás tres veces en más de 15 años, e incluso entonces todavía no estoy seguro de si realmente la necesitaba.
Mira la documentación.
1. Guión bajo único
De PEP-8:
_single_leading_underscore: indicador débil de “uso interno”. P.ej
from M import *
no importa objetos cuyo nombre comience con un guión bajo.
2. Doble guión bajo:
Del tutorial de Python:
Cualquier identificador del formulario
__spam
(al menos dos guiones bajos iniciales, como máximo un guión bajo final) se reemplaza textualmente con_classname__spam
dondeclassname
es el nombre de la clase actual sin los guiones bajos iniciales. Esta manipulación se realiza sin tener en cuenta la posición sintáctica del identificador, por lo que se puede utilizar para definir instancias privadas de clase y variables de clase, métodos, variables almacenadas en globales e incluso variables almacenadas en instancias. privado a esta clase en instancias de otras clases. La manipulación de nombres está destinada a brindar a las clases una manera fácil de definir variables y métodos de instancia “privados”, sin tener que preocuparse por las variables de instancia definidas por clases derivadas, o manipular variables de instancia por código fuera de la clase. Tenga en cuenta que las reglas de mutilación están diseñadas principalmente para evitar accidentes; todavía es posible que un alma determinada acceda o modifique una variable que se considera privada.
Reseñas y puntuaciones
Si te ha sido provechoso este artículo, agradeceríamos que lo compartas con más entusiastas de la programación y nos ayudes a dar difusión a nuestra información.