Métodos de Instância

Os métodos de instância são funções definidas dentro de uma classe que operam numa instância específica dessa classe. Estes métodos recebem automaticamente a instância atual como primeiro argumento, que é convencionalmente chamado de self. Este capítulo irá explorar como criar e utilizar métodos de instância em Python através de exemplos práticos.

Definição de um Método de Instância

Para definir um método de instância, incluímo-lo dentro da definição da classe e garantimos que ele aceite self como o primeiro parâmetro. Segue um exemplo simples:

class Veiculo:
    def __init__(self, marca, modelo, ano):
        self.marca = marca
        self.modelo = modelo
        self.ano = ano
    
    def descricao(self):
        return f"{self.ano} {self.marca} {self.modelo}"

# Criar uma instância de Veiculo
meu_carro = Veiculo("Toyota", "Corolla", 2020)
print(meu_carro.descricao())

Neste exemplo, descricao é um método de instância que acessa os atributos da instância de Veiculo referidos por self.

Métodos que Alteram o Estado da Instância

Os métodos de instância também podem modificar o estado da instância:

class Contador:
    def __init__(self):
        self.valor = 0
    
    def incrementar(self):
        self.valor += 1
    
    def decrementar(self):
        self.valor -= 1
    
    def obter_valor(self):
        return self.valor

# Criar uma instância de Contador
contador = Contador()
contador.incrementar()
contador.incrementar()
contador.decrementar()
print(contador.obter_valor())  # Deveria imprimir 1

No exemplo acima, os métodos incrementar e decrementar modificam o valor de self.valor, enquanto obter_valor retorna o valor atual.

Exemplo Real-World: Gestão de Tarefas

Vamos ver um exemplo mais realista, onde criamos uma aplicação simples de gestão de tarefas:

class Tarefa:
    def __init__(self, descricao, concluida=False):
        self.descricao = descricao
        self.concluida = concluida

    def marcar_concluida(self):
        self.concluida = True
    
    def desmarcar_concluida(self):
        self.concluida = False
    
    def mostrar_tarefa(self):
        estado = "Concluída" if self.concluida else "Por concluir"
        return f"Tarefa: {self.descricao} - Estado: {estado}"

# Criar algumas tarefas
tarefa1 = Tarefa("Estudar para o teste de matemática")
tarefa2 = Tarefa("Ir ao supermercado")

tarefa1.marcar_concluida()
print(tarefa1.mostrar_tarefa())  # Deveria imprimir que a tarefa está concluída
print(tarefa2.mostrar_tarefa())  # Deveria imprimir que a tarefa está por concluir

Neste exemplo, criámos a classe Tarefa com métodos que alteram e apresentam o estado da tarefa.

Resumo

Neste capítulo, abordámos o conceito de métodos de instância em Python. Aprendemos a:

  1. Definir métodos de instância com self como primeiro parâmetro.
  2. Criar métodos que podem alterar o estado de uma instância.
  3. Aplicar estes conceitos em exemplos práticos e do mundo real.

Quiz

  1. Qual é o propósito do parâmetro self num método de instância?

    • a) Indicar que o método é estático.
    • b) Referenciar a classe atual.
    • c) Referenciar a instância atual.
    • d) Nenhuma das acima.
  2. Um método de instância pode:

    • a) Modificar atributos da instância.
    • b) Ser chamado diretamente através da classe sem criar instâncias.
    • c) Ser definido fora da classe.
    • d) Utilizar self como segundo parâmetro.
  3. Dado o seguinte código, qual será a saída esperada?

    class Produto:
        def __init__(self, nome, preco):
            self.nome = nome
            self.preco = preco
    
        def aplicar_desconto(self, desconto):
            self.preco *= (1 - desconto / 100)
    
        def mostrar_preco(self):
            return f"O preço do {self.nome} é {self.preco} euros"
    
    produto1 = Produto("Computador", 1000)
    produto1.aplicar_desconto(10)
    print(produto1.mostrar_preco())
    
    • a) O preço do Computador é 900 euros
    • b) O preço do Computador é 1000 euros
    • c) O preço do Computador é 1100 euros
    • d) Nenhuma das acima
<< Métodos em Python Índice Métodos de Classe >>