1
resposta

Getters e Setters

Quando o professor explica com exemplos e de forma ampla e clara getters e setters? Ele faz isto quando cita uma vez na aula o que é getters e setters? Não entendi, como na hora da prática isto está sendo pedido.

1 resposta

Olá, Guilherme.

Tudo bem?

Sobre getters e setters no contexto da aula de Python. Vou tentar esclarecer como esses conceitos são aplicados na prática, especialmente com o uso do @property.

Getters e Setters

Em Python, getters e setters são métodos que permitem acessar e modificar atributos de uma classe de forma controlada. Eles são úteis para encapsular a lógica de acesso e modificação de atributos, garantindo que qualquer validação ou transformação necessária seja aplicada.

Exemplo Prático

Vamos considerar um exemplo simples de uma classe Restaurante:

class Restaurante:
    def __init__(self, nome, categoria):
        self.nome = nome
        self.categoria = categoria
        self._ativo = False  # Atributo privado

    @property
    def ativo(self):
        return '⌧' if self._ativo else '☐'

    @ativo.setter
    def ativo(self, valor):
        if isinstance(valor, bool):
            self._ativo = valor
        else:
            raise ValueError("O valor deve ser um booleano")
  1. Atributo Privado: self._ativo indica que o atributo é "privado" e não deve ser acessado diretamente fora da classe.
  2. Getter: O método ativo decorado com @property permite acessar o valor de _ativo de uma forma controlada. No exemplo, ele retorna um emoji baseado no estado do atributo.
  3. Setter: O método ativo decorado com @ativo.setter permite modificar o valor de _ativo, garantindo que apenas valores booleanos sejam atribuídos.

Uso na Prática

Com a classe Restaurante definida, você pode criar instâncias e acessar/modificar o atributo ativo de forma segura:

restaurante = Restaurante("Pizza Express", "Italiana")
print(restaurante.ativo)  # Saída: ☐

restaurante.ativo = True
print(restaurante.ativo)  # Saída: ⌧

# Tentativa de atribuir um valor inválido
try:
    restaurante.ativo = "sim"
except ValueError as e:
    print(e)  # Saída: O valor deve ser um booleano

Os getters e setters são uma forma de encapsular a lógica de acesso e modificação de atributos, proporcionando maior controle e segurança. No exemplo da aula, o @property é usado para modificar a forma como um atributo é lido, enquanto o setter garante que apenas valores válidos sejam atribuídos.

Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.