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.
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.