86 lines
2.2 KiB
Python
86 lines
2.2 KiB
Python
import abc
|
|
|
|
|
|
class Conta(abc.ABC):
|
|
def __init__(self, agencia: int, conta: int, saldo: float = 0) -> None:
|
|
self.agencia = agencia
|
|
self.conta = conta
|
|
self.saldo = saldo
|
|
|
|
@abc.abstractmethod
|
|
def sacar(self, valor: float) -> float: ...
|
|
|
|
def depositar(self, valor: float) -> float:
|
|
self.saldo += valor
|
|
self.detalhes(f'(DEPÓSITO {valor})')
|
|
return self.saldo
|
|
|
|
def detalhes(self, msg: str = '') -> None:
|
|
print(f'O seu saldo é {self.saldo:.2f} {msg}')
|
|
print('--')
|
|
|
|
def __repr__(self):
|
|
class_name = type(self).__name__
|
|
attrs = f'({self.agencia!r}, {self.conta!r}, {self.saldo!r})'
|
|
return f'{class_name}{attrs}'
|
|
|
|
|
|
class ContaPoupanca(Conta):
|
|
def sacar(self, valor):
|
|
valor_pos_saque = self.saldo - valor
|
|
|
|
if valor_pos_saque >= 0:
|
|
self.saldo -= valor
|
|
self.detalhes(f'(SAQUE {valor})')
|
|
return self.saldo
|
|
|
|
print('Não foi possível sacar o valor desejado')
|
|
self.detalhes(f'(SAQUE NEGADO {valor})')
|
|
return self.saldo
|
|
|
|
|
|
class ContaCorrente(Conta):
|
|
def __init__(
|
|
self, agencia: int, conta: int,
|
|
saldo: float = 0, limite: float = 0
|
|
):
|
|
super().__init__(agencia, conta, saldo)
|
|
self.limite = limite
|
|
|
|
def sacar(self, valor: float) -> float:
|
|
valor_pos_saque = self.saldo - valor
|
|
limite_maximo = -self.limite
|
|
|
|
if valor_pos_saque >= limite_maximo:
|
|
self.saldo -= valor
|
|
self.detalhes(f'(SAQUE {valor})')
|
|
return self.saldo
|
|
|
|
print('Não foi possível sacar o valor desejado')
|
|
print(f'Seu limite é {-self.limite:.2f}')
|
|
self.detalhes(f'(SAQUE NEGADO {valor})')
|
|
return self.saldo
|
|
|
|
def __repr__(self):
|
|
class_name = type(self).__name__
|
|
attrs = f'({self.agencia!r}, {self.conta!r}, {self.saldo!r}, '\
|
|
f'{self.limite!r})'
|
|
return f'{class_name}{attrs}'
|
|
|
|
|
|
if __name__ == '__main__':
|
|
cp1 = ContaPoupanca(111, 222)
|
|
cp1.sacar(1)
|
|
cp1.depositar(1)
|
|
cp1.sacar(1)
|
|
cp1.sacar(1)
|
|
print('##')
|
|
cc1 = ContaCorrente(111, 222, 0, 100)
|
|
cc1.sacar(1)
|
|
cc1.depositar(1)
|
|
cc1.sacar(1)
|
|
cc1.sacar(1)
|
|
cc1.sacar(98)
|
|
cc1.sacar(1)
|
|
print('##')
|