> For the complete documentation index, see [llms.txt](https://aprendendo-python.vidal.press/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aprendendo-python.vidal.press/getters-e-setter.md).

# Getters e Setter

<figure><img src="/files/FhZEyBU1xtP43vU6Jdvx" alt=""><figcaption><p>Doe, ajude a continuar criando conteúdo</p></figcaption></figure>

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.

**Exemplo de Getter**:

```python
pythonCopiar códigoclass Pessoa:
    def __init__(self, nome, idade):
        self._nome = nome  # Atributo protegido
        self._idade = idade

    def get_nome(self):
        return self._nome

    def get_idade(self):
        return self._idade

# Criando um objeto
pessoa = Pessoa("Alice", 30)
print(pessoa.get_nome())  # Saída: Alice
print(pessoa.get_idade())  # Saída: 30
```

**1.2. Setters**

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**:

```python
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**:

```python
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.
