Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Name Mangling e Atributo Privado

Fala galera da Alura, tudo bem com vocês? Tenho duas perguntas:

1) Não entendi muito bem o conceito de name mangling. Poderia explicar por gentileza? 2) Por que com apenas um underscore ( _ ) o atributo torna privado?

1 resposta
solução!

Oi Felipe!

Atributos, métodos ou classes seguidos por 2 ou 1 underscores, são uma forma de deixar claro que algo não é para ser acessado diretamente.

Python não é uma linguagem que é possível declarar um atributo literalmente privado e que não pode ser acessado, como Java, que tem a palavra chave private para isso. Então se usa os underscores.

Os 2 underscores formam o tal do "name mangling" que faz com que o nome dos atributos sejam reescritos pelo Python. Algumas pessoas usam isso para tornar o atributo privado, o que é válido, mas o propósito do name mangling é fazer com que não haja conflito entre nomes de atributos ou métodos entre classes.

Apenas um underscore é uma convenção para tornar atributos ou métodos privados. Mas como eu disse, Python não tem suporte para atributos realmente privados, então por isso é dito que é apenas um convenção. (Nota: embora seja chamado de convenção, o Python ainda tem comportamentos especiais com atributos que começam com apenas um underscore. Por exemplo, se você importar uma classe, e nessa classe houver atributos ou métodos que começam com apenas um underscore, eles não vão ser importados.)

Esses underscores são métodos que nós que programamos em Python usamos para dizer a outros programadores (e a nós mesmos) que algo não é para ser acessado diretamente. Isso não vai impedir que eles, ou nós mesmos, acessem. Mas vai deixar claro que não é para mexer. Pois, segundo a filosofia do Python, somos todos adultos e não vamos mexer no que sabemos que não é para ser mexido.

Espero que tenha esclarecido um pouco para você :)