Getters e setters são métodos usados para acessar e modificar os atributos de uma classe. Eles ajudam a encapsular os dados e fornecem uma maneira controlada de interagir com os atributos, permitindo a validação e controle de acesso.
1.1. Getters
Um getter é um método que retorna o valor de um atributo.
Um setter é um método que define ou altera o valor de um atributo. Ele pode incluir lógica para validar os dados antes de atribuí-los.
Exemplo de Setter:
pythonCopiar códigoclass Pessoa:
def __init__(self, nome, idade):
self._nome = nome
self.set_idade(idade) # Usando o setter
def get_nome(self):
return self._nome
def get_idade(self):
return self._idade
def set_idade(self, idade):
if idade < 0:
raise ValueError("Idade não pode ser negativa.")
self._idade = idade
# Criando um objeto
pessoa = Pessoa("Bob", 25)
print(pessoa.get_idade()) # Saída: 25
# Alterando a idade
pessoa.set_idade(35)
print(pessoa.get_idade()) # Saída: 35
# Tentando definir uma idade negativa
try:
pessoa.set_idade(-5)
except ValueError as e:
print(e) # Saída: Idade não pode ser negativa.
2. Propriedades em Python
Em Python, você pode usar o decorador @property para simplificar o uso de getters e setters, tornando a sintaxe mais limpa e legível.
Exemplo de Propriedades:
pythonCopiar códigoclass Pessoa:
def __init__(self, nome, idade):
self._nome = nome
self._idade = idade
@property
def nome(self):
return self._nome
@property
def idade(self):
return self._idade
@idade.setter
def idade(self, idade):
if idade < 0:
raise ValueError("Idade não pode ser negativa.")
self._idade = idade
# Criando um objeto
pessoa = Pessoa("Carlos", 40)
print(pessoa.nome) # Saída: Carlos
print(pessoa.idade) # Saída: 40
# Alterando a idade
pessoa.idade = 45
print(pessoa.idade) # Saída: 45
# Tentando definir uma idade negativa
try:
pessoa.idade = -10
except ValueError as e:
print(e) # Saída: Idade não pode ser negativa.
3. Conclusão
A Programação Orientada a Objetos é uma abordagem poderosa que facilita a organização do código e a reutilização. O uso de getters e setters, além de propriedades, permite encapsular a lógica de acesso e modificação dos atributos de maneira controlada, contribuindo para a robustez do código.