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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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ê :)