Python é uma linguagem que valoriza a legibilidade e a simplicidade, e parte disso envolve certas convenções em torno do uso de sublinhados em nomes de objetos. Essas convenções sinalizam aos desenvolvedores como certos atributos e métodos devem ser utilizados.
Sublinhado Simples: Uma Dica para Uso Interno
Quando você vê um único sublinhado antes de um nome em Python, como _variavel
, é um sinal de que isso é um indicador “fraco” de uso interno. Isso significa que o atributo ou método é destinado ao uso dentro do módulo ou classe, e não para ser acessado diretamente de fora. Não é uma regra estrita imposta pelo Python, mas mais uma diretriz para os desenvolvedores.
Por exemplo, se você tem uma classe com um método chamado _metodo_interno
, está sugerindo que este método é destinado a ser usado pela própria classe e não de fora do seu escopo.
class MinhaClasse:
def _metodo_interno(self):
pass
No contexto de módulos, usar um único sublinhado significa que, ao importar um módulo usando from modulo import *
, nomes com um sublinhado inicial não serão importados, a menos que o módulo defina uma lista __all__
que os inclua explicitamente.
Duplo Sublinhado: Alteração de Nome para Privacidade
Duplos sublinhados antes de um nome, como __variavel
, introduzem um recurso conhecido como alteração de nome (name mangling). É onde o Python internamente altera o nome da variável para incluir o nome da classe. Isso é feito para evitar conflitos de nomes, especialmente ao lidar com herança onde uma classe base e uma subclasse podem ter atributos ou métodos com o mesmo nome.
Aqui está um exemplo de como a alteração de nome funciona:
class MinhaClasse:
def __init__(self):
self.__variavel_privada = "Eu sou privada!"
instancia = MinhaClasse()
# Acessando o nome alterado
print(instancia._MinhaClasse__variavel_privada) # Saída: Eu sou privada!
Tentar acessar __variavel_privada
diretamente resultará em um AttributeError
porque ela foi alterada para _MinhaClasse__variavel_privada
.
Duplos Sublinhados no Início e no Fim: Métodos Especiais
Nomes que começam e terminam com duplos sublinhados, como __init__
ou __str__
, são reservados para uso especial na linguagem. Esses métodos “mágicos” têm propósitos específicos e são usados pelo Python de maneiras particulares. Por exemplo, __init__
é chamado quando um objeto é criado, e __str__
é chamado pela função embutida str()
e pela instrução print
para calcular a representação em string “informal” de um objeto.
Aqui está um exemplo de uma classe usando um método especial:
class MinhaClasse:
def __init__(self, valor):
self.valor = valor
def __str__(self):
return f"MinhaClasse com valor: {self.valor}"
instancia = MinhaClasse(10)
print(instancia) # Saída: MinhaClasse com valor: 10
Resumo
Em resumo, um único sublinhado antes do nome de um objeto em Python é uma dica para uso interno, sugerindo que o atributo ou método é destinado ao uso dentro do módulo ou classe. Um duplo sublinhado inicia a alteração de nome, que é a maneira do Python de criar variáveis privadas para evitar conflitos de nomes em herança. Finalmente, duplos sublinhados no início e no fim de um nome são reservados para métodos especiais que o Python usa de maneiras específicas. Entender essas convenções pode ajudá-lo a escrever um código mais “Pythonico” e entender as intenções por trás de certos padrões de nomenclatura.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários