8.13 Exercício: Primeira Classe Python
-
Crie um arquivo chamado conta.py na pasta oo criada no exercício anterior.
-
Crie a classe Conta sem nenhum atributo e salve o arquivo.
class Conta: pass- Vá até a pasta onde se encontra o arquivo conta.py e crie um novo arquivo, chamado
conta_teste.py . Dentro deste arquivo importe a classe Conta do módulo conta.
from conta import Conta- Crie uma instância (objeto) da classe Conta e utilize a função type() para verificar o tipo do objeto:
conta = Conta() type(conta)
<class ‘conta.Conta’>
Além disso, crie alguns atributos e tente acessá-los.
- Abra novamente o arquivo conta.py e escreva o método init () , recebendo os atributos anteriormente definidos por nós que toda conta deve ter (numero titular, saldo e limite):
class Conta:
python
def __init__(self, numero, titular, saldo, limite): self.numero = numero
self.titular = titular self.saldo = saldo self.limite = limite
- No arquivo conta_teste.py , Tente criar uma conta sem passar qualquer argumento no construtor:
conta = Conta()
Traceback (most recent call last): File "<stdin>", line 1, in <module>
TypeError: init () missing 4 required positional arguments: 'numero', 'titular', 'saldo', and 'limite
Note que o interpretador acusou um erro. O método init () exige 4 argumentos 'numero', 'titular', 'saldo' e 'limite'.
- Agora vamos seguir o exigido pela classe, pela receita de uma conta:
conta = Conta(‘123-4’, ‘João’, 120.0, 1000.0)
- O interpretador não acusou nenhum erro. Vamos imprimir o numero e titular da conta:
print(conta.numero) '123-4'
python
print(conta.titular) 'João'- Crie o método deposita() dentro da classe Conta . Esse método deve receber uma referência do próprio objeto e o valor a ser adicionado ao saldo da conta.
def deposita(self, valor): self.saldo += valor- Crie o método saca() que recebe como argumento uma referência do próprio objeto e o valor a ser sacado. Esse método subtrairá o valor do saldo da conta.
def saca(self, valor): self.saldo -= valor- Crie o método extrato() , que recebe como argumento uma referência do próprio objeto. Esse método imprimirá o saldo da conta:
def extrato(self):
python
print(f'numero: {} \nsaldo: {} {self.numero, self.saldo}')- Modifique o método saca() fazendo retornar um valor que representa se a operação foi ou não bem sucedida. Lembre que não é permitido sacar um valor maior do que o saldo.
def saca(self, valor):
python
if (self.saldo < valor): return False
java
else:
self.saldo -= valor return True
3. Crie o método transfere_para() que recebe como argumento uma referência do próprio objeto, uma Conta destino e o valor a ser transferido. Esse método deve sacar o valor do próprio objeto e depositar na conta destino:
java
def transfere_para(self, destino, valor): retirou = self.saca(valor)
if (retirou == False): return False
else:
destino.deposita(valor) return True
- Por fim, crie duas contas no arquivo teste-conta.py e verifique os métodos criados.
conta.deposita(50.0) conta.extrato() conta.saca(20.0) conta.extrato()
- (Opcional) Crie uma classe para representar um cliente do nosso banco que deve ter nome ,
sobrenome e cpf . Instancie uma Conta e passe um cliente como titular da conta. Modifique
o método extrato() da classe Conta para imprimir, além do número e o saldo, os dados do cliente. Podemos criar uma Conta sem um Cliente ? E um Cliente sem uma Conta ?
- (Opcional) Crie uma classe que represente uma data, com dia, mês e ano. Crie um atributo
data_abertura na classe Conta . Crie uma nova conta e faça testes no console do Python.
- (Desafio) Crie uma classe Historico que represente o histórico de uma Conta seguindo o exemplo da apostila. Faça testes no console do Python criando algumas contas, fazendo operações e por último mostrando o histórico de transações de uma Conta . Faz sentido criar um objeto do tipo Historico sem uma Conta?
Agora, além de funcionar como esperado, nosso código não permite criar uma conta sem os atributos que definimos anteriormente. Discuta com seus colegas e instrutor as vantagens da orientação a objetos até aqui.
CAPÍTULO 9