Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

O duplo underline é realmente para atributos privados?

Olá! Fiquei curioso com o uso do underline(_) no python. Por isso pesquisei sobre e acabei achando um artigo (https://hackernoon.com/understanding-the-underscore-of-python-309d1a029edc) que fala que o uso dos dois underlines (e.g. self.__nome) não deve ser usado como "modificador de acesso" no python. Também diz que o uso de 1 underline só serve como indicador, mas não faz o atributo, classe ou método serem, de fato, privados. Alguém poderia me esclarecer melhor se usar dois underlines é má prática ou não?

3 respostas

Leonardo,

Esses são nomes começados e terminados com dois underscores. Eles são conhecidos como "métodos dunder". "Dunder" significa "double underscore".

Ian Bicking é o autor original do pip, é uma fonte de inspiração e estudo do Paste Style Guide.

Vale notar essa pérola de pensamento pythonico: "Never, ever use two leading underscores. This is annoyingly private. If name clashes are a concern, use explicit name mangling instead (e.g., _MyThing_blahblah). This is essentially the same thing as double-underscore, only it’s transparent where double underscore obscures."

Tradução Livre:

"Nunca, jamais use dois underscores à esquerda. Isto é irritantemente privado. Se está preocupado com conflito de nomes, seja explícito na transformação do nome (ex. _MeuTreco_blabla). Isso é essencialmente o mesmo que o underscore duplo à esquerda, porém a transparente, enquando o underscore duplo obscurece"

Ou, seja, há quem reclame da falta de modificadores de acesso em Python, e há quem reclame que o mecanismo mais básico de proteção de atributos da linguagem é "irritantemente privado".

Tem um artigo que responde muitas duvidas sobre o assunto:

http://aprenda-python.blogspot.com/2013/05/um-ou-dois-sublinhados.html

A documentação oficial é outro excelente caminho para aprender as minucias do Python:

https://docs.python.org/3/reference/lexical_analysis.html#reserved-classes-of-identifiers

Este aqui tb ajuda: https://mail.python.org/pipermail/tutor/2003-October/025932.html

Então no fim das contas, pelo o que entendi, não existem coisas privadas no python. Se você quiser mexer em um atributo, você mexe. Assim como no Java ou outras linguagens que possuem modificadores de acesso, nada te impede de mudar o modificador. Ok.

Então, visto isso, as pessoas que desenvolvem com python usam esses pseudo-modificadores (dois underscores e/ou um underscore) de modo geral ? É uma boa prática usar?

solução!

Eu uso quando estritamente necessário, uso o linter no Atom com plugins que reforçam o uso do Guia de Estilo, e nele se vc usar ele reclama bastante. Então, não é um a boa pratica!

Métodos privados no Python, realmente não existem! No curso de Java é achei isso muito chato e principalmente porque não vejo muita utilidade prática em métodos privados.

E o que é realmente importa como Herança Múltipla vc tem que implementar via Interfaces, o que é complicado para os novatos como eu.