ti-enxame.com

Convenção de codificação da função Python "private"

Ao escrever um módulo python e funcionar nele, tenho algumas funções "públicas" que devem ser expostas a pessoas de fora, mas outras funções "privadas" que devem ser vistas e usadas localmente e internamente.

Eu entendo em python não há funções privadas absolutas. Mas qual é o melhor, mais elegante ou mais usado estilo para distinguir funções "públicas" e funções "privadas"?

Listo alguns dos estilos que conheço:

  1. use __all__ no arquivo de módulo para indicar suas funções "públicas" ( Para que serve a variável de nível de módulo python __all__ do módulo? )
  2. use sublinhado no início do nome das funções "particulares"

Existe alguma outra idéia ou convenção que as pessoas usam?

Muito obrigado!

57
Kaifei

Da documentação do módulo Class do Python:

Variáveis ​​de instância privadas "que não podem ser acessadas, exceto de dentro de um objeto, não existem no Python. No entanto, existe uma convenção seguida pela maioria dos códigos Python: um nome prefixado com um sublinhado (por exemplo, _spam) deve ser tratado como uma parte não pública da API (seja uma função, uma método ou um membro de dados). Deve ser considerado um detalhe da implementação e sujeito a alterações sem aviso prévio.

Como existe um caso de uso válido para membros privados de classe (ou seja, para evitar conflitos de nomes com nomes definidos por subclasses), há suporte limitado para esse mecanismo, chamado de manipulação de nomes. Qualquer identificador do formato __spam (pelo menos dois sublinhados à esquerda, no máximo um sublinhado à direita) é textualmente substituído por _classname__spam, em que classname é o nome da classe atual com os sublinhados à esquerda removidos. Essa manipulação é feita sem considerar a posição sintática do identificador, desde que ocorra dentro da definição de uma classe.

87
Eric Hydrick