Modificadores de Acesso (público, privado e protegido)

Os modificadores de acesso são um conceito fundamental na Programação Orientada a Objetos (POO) que define como os atributos e métodos de uma classe podem ser acedidos. Em Python, existem três níveis principais de acesso: público, privado e protegido.

Público

Em Python, por defeito, todos os atributos e métodos de uma classe são públicos. Isto significa que podem ser acedidos a partir de qualquer lugar, dentro e fora da classe.

class Pessoa:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

pessoa = Pessoa("João", 30)
print(pessoa.nome)  # Saída: João
print(pessoa.idade)  # Saída: 30

Privado

Atributos e métodos privados são utilizados quando se pretende esconder a implementação interna de uma classe. Para criar um atributo ou método privado em Python, usa-se dois underscores (__) no início do nome.

class Pessoa:
    def __init__(self, nome, idade):
        self.__nome = nome
        self.__idade = idade

    def __mostrar_nome(self):
        return self.__nome

pessoa = Pessoa("João", 30)
# print(pessoa.__nome)  # Erro: AttributeError
# print(pessoa.__mostrar_nome())  # Erro: AttributeError

Note que tentar aceder aos atributos ou métodos privados resultará num erro AttributeError. No entanto, é possível aceder a estes atributos através de "name mangling":

print(pessoa._Pessoa__nome)  # Saída: João
print(pessoa._Pessoa__mostrar_nome())  # Saída: João

Este método deve ser evitado, pois contraria o propósito da privacidade dos dados.

Protegido

Atributos e métodos protegidos são indicados com um underscore (_) no início do nome. Estes são convencionados como não sendo pretendidos para serem acedidos fora da classe e das suas subclasses.

class Pessoa:
    def __init__(self, nome, idade):
        self._nome = nome
        self._idade = idade

pessoa = Pessoa("João", 30)
print(pessoa._nome)  # Saída: João
print(pessoa._idade)  # Saída: 30

Embora não seja recomendável aceder a atributos protegidos fora da classe ou das suas subclasses, este nível de acesso é mais sobre convenção do que sobre restrição técnica.

Resumo

Os modificadores de acesso são essenciais para controlar a forma como os dados e métodos de uma classe são utilizados e modificados.

  • Público: Pode ser acedido de qualquer lugar.
  • Privado: Pode ser acedido apenas dentro da própria classe.
  • Protegido: Pode ser acedido dentro da classe e das suas subclasses, mas não é recomendado aceder fora destas.

Quiz

  1. O que acontece se tentar aceder a um atributo privado diretamente fora da classe?
  2. Como se denota um método protegido em Python?
  3. Qual é a principal diferença entre um atributo protegido e um atributo privado?

Responda a estas perguntas para reforçar o seu entendimento sobre modificadores de acesso em Python.

<< Métodos de Acesso (Getter... Índice Atividade Prática: Criaçã... >>