Atividade Prática: Implementação de Métodos na Classe

Neste capítulo, vamos aprender a implementar diferentes tipos de métodos numa classe em Python. Utilizaremos um exemplo prático de uma classe que representa um banco digital. Esta classe incluirá métodos de instância, métodos de classe e métodos estáticos.

1. Criar a Classe Banco

Primeiro, vamos criar uma classe simples chamada Banco que irá armazenar e gerir informações de contas bancárias.

class Banco:
    numero_total_contas = 0
    
    def __init__(self, nome):
        self.nome = nome
        self.contas = []
        Banco.numero_total_contas += 1

2. Método de Instância

Métodos de instância são aqueles que operam sobre uma instância específica da classe. Eles têm acesso a atributos de instância através da palavra-chave self.

Vamos adicionar um método para adicionar uma nova conta ao banco:

class Banco:
    numero_total_contas = 0
    
    def __init__(self, nome):
        self.nome = nome
        self.contas = []
        Banco.numero_total_contas += 1
    
    def adicionar_conta(self, conta):
        self.contas.append(conta)
        print(f"Conta {conta} adicionada ao banco {self.nome}")

3. Método de Classe

Métodos de classe operam na classe em si, e não numa instância específica. Eles são indicados com @classmethod e utilizam cls como primeiro argumento.

Vamos adicionar um método de classe para mostrar o número total de contas em todos os bancos:

class Banco:
    numero_total_contas = 0
    
    def __init__(self, nome):
        self.nome = nome
        self.contas = []
        Banco.numero_total_contas += 1
    
    def adicionar_conta(self, conta):
        self.contas.append(conta)
        print(f"Conta {conta} adicionada ao banco {self.nome}")
    
    @classmethod
    def obter_numero_total_contas(cls):
        print(f"Número total de contas em todos os bancos: {cls.numero_total_contas}")

4. Método Estático

Métodos estáticos não operam na instância nem na classe, mas são úteis para funções que têm uma lógica relacionada com a classe. Eles são indicados com @staticmethod.

Vamos adicionar um método estático para validar o formato de um número de conta:

class Banco:
    numero_total_contas = 0
    
    def __init__(self, nome):
        self.nome = nome
        self.contas = []
        Banco.numero_total_contas += 1
    
    def adicionar_conta(self, conta):
        self.contas.append(conta)
        print(f"Conta {conta} adicionada ao banco {self.nome}")
    
    @classmethod
    def obter_numero_total_contas(cls):
        print(f"Número total de contas em todos os bancos: {cls.numero_total_contas}")
    
    @staticmethod
    def validar_numero_conta(conta):
        if len(conta) == 8 and conta.isdigit():
            print(f"Conta {conta} é válida.")
            return True
        else:
            print(f"Conta {conta} é inválida.")
            return False

Testando a Implementação

Vamos agora testar a nossa classe com os três tipos de métodos:

# Criar instâncias do banco
banco1 = Banco("Banco A")
banco2 = Banco("Banco B")

# Adicionar contas
banco1.adicionar_conta("12345678")
banco2.adicionar_conta("87654321")

# Utilizar o método de classe
Banco.obter_numero_total_contas()

# Utilizar o método estático
Banco.validar_numero_conta("12345678")
Banco.validar_numero_conta("1234abcd")

Resumo

Neste capítulo, demonstrámos como implementar e utilizar métodos de instância, métodos de classe e métodos estáticos numa classe Python. Cada um destes tipos de métodos foi aplicado na classe Banco para ilustrar as diferenças práticas nas suas utilizações.

Quiz

  1. Qual é a diferença entre um método de instância e um método de classe?

    • a) Métodos de instância operam na classe como um todo.
    • b) Métodos de classe operam numa instância específica da classe.
    • c) Métodos de instância têm acesso aos atributos de instância através de self, enquanto métodos de classe utilizam cls.
  2. Por que motivo utilizaríamos um método estático na nossa classe?

    • a) Para modificar atributos de instância.
    • b) Para executar uma função que está relacionada com a classe mas não necessita de acesso a atributos de instância ou da classe.
    • c) Para contar o número de instâncias criadas.
  3. O que é necessário para definir um método de classe?

    • a) Utilizar a palavra-chave staticmethod e self como primeiro argumento.
    • b) Utilizar a palavra-chave classmethod e cls como primeiro argumento.
    • c) Utilizar a palavra-chave classmethod e self como primeiro argumento.
  4. Como podes validar um número de conta utilizando a classe Banco?

    • a) Invocando o método validar_numero_conta como um método de instância.
    • b) Invocando o método validar_numero_conta como um método estático.
    • c) Invocando o método validar_numero_conta sem self ou cls.

Respostas: 1-c, 2-b, 3-b, 4-b.

Com estas actividades e exemplos, esperamos que compreendas melhor a implementação e utilização de diferentes tipos de métodos numa classe.

<< Métodos Estáticos Índice Encapsulamento >>