GeeksforGeeks
Prerequisito: Sublinhar em Python
Em Python, não há existência de variáveis de instância “Privadas” que não podem ser acessadas exceto dentro de um objeto. Entretanto, uma convenção está sendo seguida pela maioria dos códigos e codificadores Python, ou seja, um nome prefixado com um sublinhado, Por exemplo, _geek deve ser tratado como uma parte não pública da API ou qualquer código Python, seja uma função, um método ou um membro de dados. Enquanto passamos por isso, nós também tentaríamos entender o conceito de várias formas de trailing underscores, por exemplo, para _ no intervalo(10), __init__(self).
Mangling and how it work
Em Python, há algo chamado mangling name, o que significa que há um suporte limitado para um caso de uso válido para membros privados de classe basicamente para evitar conflitos de nomes com nomes definidos por subclasses. Qualquer identificador da forma __geek (pelo menos dois sublinhados principais ou, no máximo, um sublinhado final) é substituído por _classname__geek, onde classname é o nome da classe atual com um sublinhado principal desnudado. Desde que isso ocorra dentro da definição da classe, esta mangling é feita. Isto é útil para permitir que subclasses substituam métodos sem quebrar chamadas de métodos intraclasse.
Vejamos este exemplo e tentemos descobrir como este sublinhado funciona:
As regras de mangling são projetadas principalmente para evitar acidentes, mas ainda é possível acessar ou modificar uma variável que é considerada privada. Isto pode até ser útil em circunstâncias especiais, como no debugger.
_Single Leading Underscores
Então basicamente um sublinhado no início de um método, função, ou membro de dados significa que você não deve acessar este método porque ele não faz parte da API. Vamos olhar para este trecho de código:
O snippet é retirado do código fonte do Django (django/forms/forms.py). Isto sugere que erros é uma propriedade, e também faz parte da API, mas o método, _get_errors, é “privado”, portanto não se deve acessá-lo.
__Double Leading Underscores
Dois sublinha, no início, causar muita confusão. Isto é mais uma questão de sintaxe do que uma convenção. double underscore mangle the attribute names of a class to avoid conflicts of attribute names between classes. Por exemplo:
__Douplo leading e Double trailing underscores__
Há outro caso de double leading e trailing underscores. Nós seguimos isto enquanto usamos variáveis ou métodos especiais (chamados de “método mágico”) como__len__, __init__. Estes métodos fornecem características sintácticas especiais para os nomes. Por exemplo, __file__ indica a localização do arquivo Python, __eq__ é executado quando a == b expressão é executada.
Exemplo:
class
Geek:
def
__init__(
self
, ab):
self
.ab
=
ab
def
__custom__(
self
):
pass
This article is contributed by Chinmoy Lenka. Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou enviar seu artigo por e-mail para [email protected]. Veja o seu artigo que aparece na página principal do GeeksforGeeks e ajude outros Geeks.
Eu referi Python Docs, hackernoon.com e igorsobreira.com
Por favor escreva comentários se encontrar algo incorreto, ou se quiser compartilhar mais informações sobre o tópico discutido acima.
Attention geek! Fortaleça suas bases com o Curso Básico de Programação Python e aprenda o básico.
Para começar, seus preparativos para entrevistas Melhore seus conceitos de Estruturas de Dados com o Curso Python DS.