Olá, não consegui compreender muito bem a explicação.
os dois __ torna os atributos acessiveis somente como leitura? essa regra é para o desenvolvedor implementar quando o usuario solicitar uma ação? Estou meio perdido.
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!
Olá, não consegui compreender muito bem a explicação.
os dois __ torna os atributos acessiveis somente como leitura? essa regra é para o desenvolvedor implementar quando o usuario solicitar uma ação? Estou meio perdido.
Em Python, não há suporte para variáveis e métodos privados no sentido tradicional, como em outras linguagens de programação. No entanto, existem algumas convenções que são comumente usadas para simular a privacidade.
Para criar uma variável privada em uma classe, é convencional colocar um sublinhado (_) antes do nome da variável. Por exemplo:
class MyClass:
def __init__(self):
self._variavel_privada = "Eu sou privada"Para criar um método privado, é convencional colocar dois sublinhados antes do nome do método. Por exemplo:
class MyClass:
def __init__(self):
self._variavel_privada = "Eu sou privada"
def __metodo_privado(self):
print("Eu sou um metodo privado")No entanto, é importante notar que esses nomes não são realmente privados e podem ser acessados externamente. Elas só são convencionais e servem como um indicativo para outros desenvolvedores que essas variáveis ou métodos não devem ser usados externamente.
Outra forma de fazer isso é usando o módulo "name mangling" que adiciona prefixo duplo __ no nome da variavel ou metodo. Exemplo:
class MyClass:
def __init__(self):
self.__variavel_privada = "Eu sou privado"
def __metodo_privado(self):
print("Eu sou um metodo privado")Esse método garante que essas variáveis e métodos não possam ser acessados diretamente de fora da classe, mas ainda podem ser acessados por meio de métodos da própria classe.
As convenções de nomenclatura para criar variáveis e métodos privados em Python, como o uso de um ou dois sublinhados (_ ou __) antes do nome, não restringem de forma alguma a capacidade de ler ou escrever essas variáveis ou chamar esses métodos. Elas são apenas convenções usadas para indicar que essas variáveis ou métodos não devem ser usados externamente e devem ser consideradas como "privadas" pelos desenvolvedores.
Ao acessar essas variáveis e métodos privados, é possível ler e escrever seus valores e chamá-los normalmente. Eles não são "somente de leitura".
class MyClass:
def __init__(self):
self._private_var = "I'm private"
def __private_method(self):
print("I'm a private method")
obj = MyClass()
print(obj._private_var) # "I'm private"
obj._private_var = "I'm not private anymore"
obj.__private_method() # "I'm a private method"
A única forma de realmente restringir acesso a variáveis e métodos é usando o módulo "name mangling" que adiciona prefixo duplo __ no nome da variavel ou metodo. Ele impede que essas variáveis e métodos sejam acessadas diretamente de fora da classe, mas ainda podem ser acessadas por meio de métodos da própria classe.
Agradeço pela contribuição, consegui compreender.
どうも。 Domo.