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
-
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 utilizamcls
.
-
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.
-
O que é necessário para definir um método de classe?
- a) Utilizar a palavra-chave
staticmethod
eself
como primeiro argumento. - b) Utilizar a palavra-chave
classmethod
ecls
como primeiro argumento. - c) Utilizar a palavra-chave
classmethod
eself
como primeiro argumento.
- a) Utilizar a palavra-chave
-
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
semself
oucls
.
- a) Invocando o método
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.