Esse "sublinhado" parece ocorrer muito, e eu queria saber se isso era um requisito na linguagem Python, ou apenas uma questão de convenção?
Além disso, alguém poderia nomear e explicar quais funções tendem a ter sublinhados e por que ( __init__
por exemplo)?
python
function
methods
double-underscore
Chuck Testa
fonte
fonte
Respostas:
No Python PEP 8 - Guia de Estilo para Código Python :
Observe que nomes com sublinhados duplos à esquerda e à direita são essencialmente reservados para o próprio Python: "Nunca invente esses nomes; use-os apenas como documentado".
fonte
__double_leading_underscore
ainda é público , a variável é renomeada para evitar conflitos.Os outros entrevistados estão corretos ao descrever os sublinhados duplos à esquerda e à direita como uma convenção de nomenclatura para métodos "especiais" ou "mágicos".
Embora você possa chamar esses métodos diretamente (
[10, 20].__len__()
por exemplo), a presença dos sublinhados é uma dica de que esses métodos devem ser chamados indiretamente (len([10, 20])
por exemplo). A maioria dos operadores python tem um método "mágico" associado (por exemplo,a[x]
é a maneira usual de invocara.__getitem__(x)
).fonte
Os nomes cercados por sublinhados duplos são "especiais" para o Python. Eles estão listados na Referência da linguagem Python, seção 3, "Modelo de dados" .
fonte
Na verdade, eu uso nomes de métodos _ quando preciso diferir entre nomes de classes pai e filho. Eu li alguns códigos que usavam essa maneira de criar classes pai-filho. Como exemplo, eu posso fornecer este código:
...
e a criança que tem um método _worker
...
fonte
Esta convenção é usada para variáveis ou métodos especiais (o chamado "método mágico") como
__init__
e__len__
. Esses métodos fornecem recursos sintáticos especiais ou fazem coisas especiais.Por exemplo,
__file__
indica a localização do arquivo Python,__eq__
é executado quando aa == b
expressão é executada.É claro que um usuário pode criar um método especial personalizado, o que é um caso muito raro, mas geralmente pode modificar alguns dos métodos especiais internos (por exemplo, você deve inicializar a classe com a
__init__
qual será executada primeiro quando uma instância de uma classe é criado).fonte
Adicionado um exemplo para entender o uso de __ em python. Aqui está a lista de Todos __
https://docs.python.org/3/genindex-all.html#_
Restrição de acesso usando __
fonte