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?
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ê :)