Eu tenho uma classe, mas todos os métodos devem ser privados (além de forma __init__
e __str__
). Devo denotar todos os métodos com um sublinhado duplo ou isso é considerado uma má prática?
Eu tenho uma classe, mas todos os métodos devem ser privados (além de forma __init__
e __str__
). Devo denotar todos os métodos com um sublinhado duplo ou isso é considerado uma má prática?
Respostas:
Os métodos privados verdadeiros - aqueles que não podem ser vistos ou usados fora de uma classe - não existem no Python. O que temos são convenções que são meramente sugestões para não tocar nas coisas que você não deveria.
O mais próximo que você chega da privacidade é de nomes desconcertantes. Um atributo de MyClass nomeado __some_attr
será renomeado _MyClass__some_attr
internamente, tornando um pouco estranho referenciá-lo de fora da classe. Isso raramente é usado. O que a maioria das pessoas faz é simplesmente colocar um único sublinhado ( _attr
) como uma notação de que algo não deve ser invocado e não faz parte da interface pública.
O uso de sublinhados duplos antes e depois do identificador, embora não seja proibido, é considerado reservado para detalhes do idioma interno (como métodos 'mágicos'). Você não deve sair com novos __attr__
s (a menos que esteja hackeando o intérprete).
__some_attr
que não serão mencionados fora da classe? Não seria bom usar sublinhado duplo à esquerda?