Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] PRIVATE NOS ATRIBUTOS

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.

3 respostas
solução!

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.