Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Aula 03 - Atividade 07

# Ex. 1
class ContaBancaria:
  def __init__(self, titular='', saldo=0.0):
    
    # "title()" Sempre capilatiza a 1ª letra dos nomes 
    self._titular = titular.title() 
    
    # Formata para exibir duas casas de centavos
    self._saldo = '{:.2f}'.format(float(saldo))
    
    # Conta sempre inicia inativa
    self._ativo = False
# Ex. 2
class ContaBancaria:
  def __init__(self, titular='', saldo=0.0):
    
    # "title()" Sempre capilatiza a 1ª letra dos nomes 
    self._titular = titular.title() 
    
    # Formata para exibir duas casas de centavos
    self._saldo = '{:.2f}'.format(float(saldo))
    
    # Conta sempre inicia inativa    
    self._ativo = False
    
  def __str__(self):
    return f'Titular: {self._titular.ljust(16)} - Saldo: R${self._saldo}'

conta_1 = ContaBancaria('bill gates', 123456789.10)
conta_2 = ContaBancaria('Eduardo', 2500.00)

print(conta_1)
print(conta_2)
print()
Ex. 3
class ContaBancaria:
  def __init__(self, titular='', saldo=0.0):
    
    # "title()" Sempre capilatiza a 1ª letra dos nomes 
    self._titular = titular.title() 
    
    # Formata para exibir duas casas de centavos
    self._saldo = '{:.2f}'.format(float(saldo))
    
    # Conta sempre inicia inativa
    self._ativo = False
    
  def __str__(self):
    return f'Titular: {self._titular.ljust(16)} - Saldo: R${self._saldo.ljust(16)} - ativo: {self._ativo}'
  
  @classmethod
  def ativar_conta(cls, cta):
    cta._ativo = True

# Cria uma instância da classe ContaBancaria
conta_1 = ContaBancaria('mônica', 4500.00)

print(conta_1)  # Imprime os dados da conta nova

ContaBancaria.ativar_conta(conta_1)  # Ativa a conta

print(conta_1)  # Imprime os dados atualizados
Exs. 4 e 5
class ContaBancaria:
  def __init__(self, titular, saldo):
    
    # "title()" Sempre capilatiza a 1ª letra dos nomes 
    self._titular = titular.title() 
    
    # Formata para exibir duas casas de centavos
    self._saldo = '{:.2f}'.format(float(saldo))
    
    # Conta sempre inicia inativa
    self._ativo = False
    
  def __str__(self):
    return f'Titular: {self._titular.ljust(16)} Saldo: R${self._saldo.ljust(16)} Status: {self.ativo}'
  
  @property
  def titular(self):
    return self._titular
  
  @property
  def saldo_com_saudacao(self):
    return f'Olá {self._titular}! Seu saldo atual é de: R${self._saldo}'

  @property
  def ativo(self):
    return '☒' if self._ativo else '☐'
  
  @classmethod
  def ativar_conta(cls, cta):
    cta._ativo = True
    
# Ex. 5:
conta_1 = ContaBancaria('bill gates', 123456789.10)

print(f'Titular: {conta_1.titular}')
print()

ContaBancaria.ativar_conta(conta_1)  # Ativa a conta
print(conta_1)          # Imprime dados da conta atualizados
print()

# Mensagem com saudação
print(conta_1.saldo_com_saudacao)
print()
Exs. 6 e 7
class ClienteBanco:
  clientes = []   # Lista para armazenar os clientes e seus dados
  
  # Constrtor
  def __init__(self, nome, sobrenome, cpf, email, telefone):
    self.nome = nome
    self. sobrenome = sobrenome
    self.cpf = cpf
    self.email = email
    self.numero = telefone
    ClienteBanco.clientes.append(self)
    
  # 7. Crie um método de classe para a conta ClienteBanco:
  # Método para imprimir os dados de clientes formatados
  @classmethod
  def listar_clientes(cls):
    print(f'  {'CLIENTE'.ljust(24)} {'CPF'.ljust(18)} {'e-MAIL'.ljust(22)} {'Nº TEL.'}')
    for cliente in cls.clientes:
      print(f'{cliente.nome} {cliente.sobrenome.ljust(24 - (len(cliente.nome) + len(cliente.sobrenome)))} {cliente.cpf.ljust(20)} {cliente.email.ljust(25)} {cliente.numero}')    

# Cria instâncias da classe ClienteBanco
cliente_1 = ClienteBanco('Eduardo', 'Peres', '888.555.222-11', 'eduardo@mail.com', '95549-4269')
cliente_2 = ClienteBanco('Sandra', 'Lopes', '200.100.300-88', 'sand.lps@mail.com', '99279-1820')
cliente_3 = ClienteBanco('Irene', 'Perez', '444.555.666-22', 'irene.lopez@mail.com', '5276-5354')

# Usando o método de classe
ClienteBanco.listar_clientes()
1 resposta
solução!

Oi, Eduardo! Como vai?

Agradeço por compartilhar sua prática completa com a comunidade Alura.

Você organizou muito bem as classes e métodos! Gostei especialmente do uso de @property e @classmethod, e de como separou a lógica em exemplos incrementais — isso mostra domínio crescente da orientação a objetos em Python. O formato visual para status da conta e a tabela de clientes ficaram muito didáticos.

Continue praticando — seus exemplos estão bem próximos de situações reais e demonstram clareza no código.

Dica: se quiser deixar o saldo como valor numérico em vez de string, pode usar round(saldo, 2) — isso facilita cálculos futuros, mantendo o valor formatado só na exibição.

Ícone de sugestão Para saber mais:

O decorador @property transforma métodos em atributos de leitura, facilitando o acesso a informações calculadas ou formatadas sem chamar diretamente uma função. Já o @classmethod permite acessar e modificar dados da própria classe.

Veja este artigo sobre boas práticas com orientação a objetos em Python: Programação Orientada a Objetos no Python: Introdução

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!