Oi, dev! Tudo bem?
Seu código está bem estruturado, parabéns pela sua elaboração, ficou realmente muito bom! Deixo algumas observações e sugestões para melhorar ainda mais sua solução:
Em relação a classe ContaBancaria
o construtor (__init__
) está correto, inicializando titular
, saldo
e _ativo
, o método especial __str__
está bem implementado, retornando uma string formatada, o método de classe ativar_conta
está correto, alterando o atributo _ativo
, a propriedade ativo
está bem implementada, retornando um símbolo baseado no estado de _ativo
.
Em relação a classe ClienteBanco
, o construtor (__init__
) está correto, aceitando os cinco atributos e o método de classe criar_conta
está correto, criando e retornando uma instância de ContaBancaria
.
Como sugestões de melhorias deixo:
- Tipos de Dados: É uma boa prática tipar os parâmetros e os retornos dos métodos para maior clareza e segurança.
- Encapsulamento: Considere usar propriedades para acessar os atributos privados
_nome
, _titular
, etc.
Podemos, então, refatorar nosso código da seguinte forma:
class ContaBancaria:
def __init__(self, titular: str, saldo: float):
self._titular = titular.title()
self.saldo = saldo
self._ativo = False
def __str__(self) -> str:
return f'Titular da conta: {self._titular} | Saldo da conta: R$ {self.saldo:.2f}'
@classmethod
def ativar_conta(cls, conta: 'ContaBancaria'):
conta._ativo = True
@property
def ativo(self) -> str:
return '✅' if self._ativo else '❎'
@property
def titular(self) -> str:
return self._titular
class ClienteBanco:
def __init__(self, nome: str, idade: int, profissao: str, endereco: str, estado_civil: str):
self._nome = nome.title()
self.idade = idade
self.profissao = profissao
self.endereco = endereco
self.estado_civil = estado_civil
def __str__(self) -> str:
return f'{self._nome.ljust(10)} | {str(self.idade).ljust(10)} | {self.profissao}'
@classmethod
def criar_conta(cls, titular: str, saldo_inicial: float) -> ContaBancaria:
conta = ContaBancaria(titular, saldo_inicial)
return conta
# Instanciando clientes
cliente1 = ClienteBanco('Martina', 20, 'Desempregada', 'Rua das Flores, 241', 'Solteira')
cliente2 = ClienteBanco('Gabriel', 19, 'Veterinário', 'Rua Senador Pinheiro Machado, 519', 'Solteiro')
cliente3 = ClienteBanco('Otávio', 33, 'Advogado', 'Rua Marechal Floriano, 705', 'Casado')
# Criando contas para os clientes
conta_cliente1 = ClienteBanco.criar_conta('Martina', 500)
print(f'Conta de {conta_cliente1.titular} criada com saldo inicial de R$ {conta_cliente1.saldo:.2f}\n')
conta_cliente2 = ClienteBanco.criar_conta('Gabriel', 10000)
print(f'Conta de {conta_cliente2.titular} criada com saldo inicial de R$ {conta_cliente2.saldo:.2f}\n')
conta_cliente3 = ClienteBanco.criar_conta('Otávio', 43670)
print(f'Conta de {conta_cliente3.titular} criada com saldo inicial de R$ {conta_cliente3.saldo:.2f}\n')
# Criando contas diretamente
conta1 = ContaBancaria('Rafael', 2000)
conta2 = ContaBancaria('Henrique', 300)
conta3 = ContaBancaria('Isabelli', 50)
print(conta1)
print(conta2)
print(f'{conta3}\n')
# Verificando e ativando conta
print(f'Conta de {conta3.titular} ativa? {conta3.ativo}\n')
ContaBancaria.ativar_conta(conta3)
print(f'Conta de {conta3.titular} ativa? {conta3.ativo}\n')
Espero ter ajudado!
Um forte abraço e bons estudos!