O Que Você Vai Aprender
Nesta aula, você explorará os Getters e Setters, métodos essenciais para implementar o encapsulamento em Python. Você entenderá como esses métodos permitem um acesso controlado e seguro aos atributos de um objeto, possibilitando a inclusão de lógica de validação e garantindo a integridade dos dados.
↔️ Conceito de Getters e Setters
Compreender a função de métodos para obter e definir valores de atributos.
🛡️ Validação e Controle
Aprender a usar getters e setters para adicionar lógica de validação e proteger a integridade dos dados.
Conceito: Getters e Setters
Em Programação Orientada a Objetos, especialmente quando lidamos com atributos que não devem ser acessados ou modificados diretamente (como atributos protegidos ou "privados"), utilizamos os Getters e Setters.
Getters (Métodos de Acesso)
São métodos usados para obter (get) o valor de um atributo. Em Python, geralmente começam com `get_` ou são apenas o nome do atributo se forem simples.
class Pessoa:
def __init__(self, nome, idade):
self._nome = nome # Atributo protegido
self._idade = idade # Atributo protegido
def get_nome(self):
return self._nome # Getter para 'nome'
def get_idade(self):
return self._idade # Getter para 'idade'
Setters (Métodos de Modificação)
São métodos usados para definir (set) ou modificar o valor de um atributo. Em Python, geralmente começam com `set_`.
A grande vantagem dos setters é que você pode incluir lógica de validação antes de permitir que o atributo seja modificado. Isso protege a integridade dos dados.
class Pessoa:
# ... (init e getters)
def set_idade(self, nova_idade):
if nova_idade > 0: # Lógica de validação!
self._idade = nova_idade
else:
print("Idade inválida! Deve ser um número positivo.")
Exemplo Prático: Classe `ContaBancaria`
Vamos aplicar os conceitos de getters e setters na classe `ContaBancaria`, controlando o acesso ao `_saldo` para garantir que as operações financeiras sejam válidas.
Implementação da `ContaBancaria` com Getter e Métodos de Operação
class ContaBancaria:
def __init__(self, titular):
self.titular = titular
self._saldo = 0.0 # Atributo protegido (por convenção, não use __saldo aqui para o exemplo simplificado)
def get_saldo(self): # Getter para obter o saldo
return self._saldo
def depositar(self, valor):
if valor > 0:
self._saldo += valor
print(f"Depósito de R${valor:.2f} realizado. Novo saldo: R${self._saldo:.2f}")
else:
print("Valor de depósito inválido. O valor deve ser positivo.")
def sacar(self, valor):
if valor > 0 and valor <= self._saldo:
self._saldo -= valor
print(f"Saque de R${valor:.2f} realizado. Novo saldo: R${self._saldo:.2f}")
elif valor <= 0:
print("Valor de saque inválido. O valor deve ser positivo.")
else:
print(f"Saldo insuficiente. Saldo atual: R${self._saldo:.2f}, Tentativa de saque: R${valor:.2f}")
# Exemplo de uso:
# minha_conta = ContaBancaria("Carlos")
# minha_conta.depositar(150.00)
# print(f"Saldo atual: R${minha_conta.get_saldo():.2f}")
# minha_conta.sacar(50.00)
# minha_conta.sacar(200.00) # Saque insuficiente
Simulador: Teste suas Operações Bancárias
Interaja com uma conta bancária de exemplo para ver como os getters e métodos de operação controlam o saldo.
Conta Bancária de Exemplo (Titular: Simulado, Saldo Inicial: R$ 1000.00)
Esta conta simula a classe `ContaBancaria` em Python, permitindo que você deposite, saque e veja o saldo de forma controlada.
Realizar Operações
Saldo atual:
Desafios para Continuar
Aplique o que aprendeu sobre getters e setters para resolver estes desafios no seu ambiente de desenvolvimento Python.
-
✓
1. Classe `Temperatura` com Getter e Setter
Crie uma classe `Temperatura` com um atributo `_celsius` (protegido). Adicione um método `get_celsius()` e um método `set_celsius(valor)`.
No `set_celsius`, adicione uma validação: a temperatura em Celsius não pode ser inferior a -273.15 (zero absoluto). Se o valor for inválido, imprima uma mensagem de erro.
-
✓
2. Expandindo a `ContaBancaria` com um Setter para Titular
À classe `ContaBancaria` (do exemplo desta aula ou da aula anterior), adicione um atributo `_titular` protegido.
Crie um método `set_titular(novo_nome)` que atualize o nome do titular. Adicione validação para garantir que o `novo_nome` não esteja vazio e tenha pelo menos 3 caracteres. Imprima mensagens de sucesso ou erro.