Em python, uma função ou variável privada do módulo é nomeada _foo
. Se é privado para uma classe, são nomes __foo
. A mecânica por trás de como esses trabalhos são diferentes, porém isso é de pouca relevância para a questão.
Por que, durante o design da linguagem Python, os caracteres sublinhados duplos foram escolhidos para os membros privados da classe? Por que não um sublinhado único, como no módulo privado? Por que não outro personagem que é mais visível? (Diferenciar _ e __ é difícil).
Tenho certeza de que existe alguma história aqui, mas estou tendo problemas para encontrá-la, porque tudo o que encontro são tutoriais que me dizem o que isso significa, e não por que é assim.
Respostas:
A Proposta de Aprimoramento do Python (PEP) 8 explica o significado pretendido por trás dos nomes de sublinhado único e duplo, entre outras convenções. Como muitos dos primeiros PEPs, ele representa as preferências de Guido van Rossum e, como o Ditador Benevolente para a Vida de Python reconheceu, suas preferências são geralmente seguidas pela comunidade de Python.
O uso de sublinhados duplos para indicar as palavras "mágicas" vai, pelo menos, tanto para trás como o pré-processador de C, que usado que convenção começando na década de 1970 ( por exemplo ,
__FILE__
,__LINE__
). Isso foi feito porque não havia símbolos fora dos limites do pré-processador; portanto, um padrão de nomeação raramente usado (vários sublinhados e maiúsculas) praticamente garantiu a falta de conflitos.fonte