# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aprendendo-python.vidal.press/getters-e-setter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
