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

Hora da prática: criando classes, construtores e métodos

Em uma carreira de desenvolvimento de software, a prática consistente desempenha um papel fundamental na construção de bases sólidas. Pensando nisso, criamos uma lista de atividades (não obrigatórias) focada em prática para melhorar ainda mais sua experiência de aprendizagem.

Bora praticar então?

Desafios

  • Crie uma classe chamada ContaBancaria com um construtor que aceita os parâmetros titular e saldo. Inicie o atributo ativo como False por padrão.

  • Na classe ContaBancaria, adicione um método especial __str__ que retorna uma mensagem formatada com o titular e o saldo da conta. Crie duas instâncias da classe e imprima essas instâncias.

  • Adicione um método de classe chamado ativar_conta à classe ContaBancaria que define o atributo ativo como True. Crie uma instância da classe, chame o método de classe e imprima o valor de ativo.

  • Refatore a classe ContaBancaria para utilizar a abordagem "pythonica" na criação de atributos. Utilize propriedades, se necessário.

  • Crie uma instância da classe e imprima o valor da propriedade titular.

  • Crie uma classe chamada ClienteBanco com um construtor que aceita 5 atributos. Instancie 3 objetos desta classe e atribua valores aos seus atributos através do método construtor.

  • Crie um método de classe para a conta ClienteBanco.

#1) ************
class ContaBancaria:
    def __init__(self, titular, saldo = 0):
        self.titular = titular
        self.saldo = saldo
        self._ativo = False

#2) ************
    def __str__(self):
        return f"Titular: {self.titular}\nSaldo: {self.saldo}"

    def ativar_conta(self):
        self._ativo = True



conta1 = ContaBancaria("João", 1000)
conta2 = ContaBancaria("Carlos", 2000)

print(f'{conta1}\nConta ativa: {conta1._ativo}')
print()
print(f'{conta2}\nConta ativa: {conta2._ativo}')

print('-----------')
#3) *************

print(f'Conta do(a) cliente \"{conta1.titular}\" está ativa? {conta1._ativo}')
conta1.ativar_conta()
print(f'Conta do(a) cliente ativada: \"{conta1._ativo}\"')
print('-----------')

print(f'Conta do(a) cliente \"{conta2.titular}\" está ativa? {conta2._ativo}')
conta2.ativar_conta()
print(f'Conta do(a) cliente ativada: \"{conta2._ativo}\"')
print('-----------')

Saida:
Titular: João
Saldo: 1000
Conta ativa: False

Titular: Carlos
Saldo: 2000
Conta ativa: False
-----------
Conta do(a) cliente "João" está ativa? False
Conta do(a) cliente ativada: "True"
-----------
Conta do(a) cliente "Carlos" está ativa? False
Conta do(a) cliente ativada: "True"
-----------
#4) ***************
class ContaBancariaPythonica:
  def __init__(self, titular, saldo = 0):
        self._titular = titular
        self._saldo = saldo
        self._ativo = False
  
  @property
  def titular(self):
    return self._titular
  
  @property
  def saldo(self):
    return self._saldo
  
  @property
  def ativo(self):
    return self._ativo

  def ativar_conta(self):
        self._ativo = True
#5) ***************
conta_pythonica = ContaBancariaPythonica("Mariana", 5000)

print(f"Titular da conta: {conta_pythonica.titular}")
print(f"Saldo da conta: {conta_pythonica.saldo}")
print(f"Conta ativa (antes de ativar): {conta_pythonica.ativo}")

conta_pythonica.ativar_conta()

print(f"Conta ativa (depois de ativar): {conta_pythonica.ativo}")

Saida:

Titular da conta: Mariana
Saldo da conta: 5000
Conta ativa (antes de ativar): False
Conta ativa (depois de ativar): True
#6) ***************
class ClienteBanco:
  def __init__(self, nome, idade, endereco, telefone, email):
    self.nome = nome
    self.idade = idade
    self.endereco = endereco
    self.telefone = telefone
    self.email = email

cliente1 = ClienteBanco("Harry Potter", 17, "Rua dos Alfeneiros, 4, Little Whinging", "+44 20 7946 0958", "harry.potter@hogwarts.ac.uk")
cliente2 = ClienteBanco("Leia Organa", 30, "Palácio de Alderaan, Alderaan", "+1 555 123 4567", "leia.organa@rebelalliance.org")
cliente3 = ClienteBanco("Tony Stark", 50, "10880 Malibu Point, Malibu, CA", "+1 310 555 1111", "tony.stark@starkindustries.com")

#7) ***************
class ClienteBancoAlura:
  @classmethod
  def criar_conta(cls, titular, saldo_inicial):
      conta = ContaBancariaPythonica(titular, saldo_inicial)
      return conta

conta_cliente1 = ClienteBancoAlura.criar_conta("Arnoldo", 1500)

print(f'Conta aberta pelo titular {conta_cliente1.titular}, com saldo inicial de R$ {conta_cliente1.saldo} ')

Saida:
Conta aberta pelo titular Arnoldo, com saldo inicial de R$ 1500 

1 resposta
solução!

Oi, Carlos. Como vai?

Você organizou muito bem a resolução em etapas e foi evoluindo a classe de uma versão mais direta para uma versão mais pythonica, usando @property para expor titular, saldo e ativo.

Também chamou atenção o uso de __str__, porque isso deixa a impressão dos objetos mais clara e facilita bastante os testes durante o desenvolvimento. Um ajuste importante é que o item sobre ativar_conta pedia um método de classe, e no seu exemplo ele ficou como método de instância, mas sua lógica de ativação está correta.

Uma dica interessante para o futuro é criar um método como depositar, porque ele ajuda a centralizar a alteração do saldo com mais organização. Veja este exemplo:


class ContaBancaria:
    def __init__(self, titular, saldo=0):
        self._titular = titular
        self._saldo = saldo

    def depositar(self, valor):
        if valor > 0:
            self._saldo += valor

Nesse código, o método depositar soma um novo valor ao saldo apenas quando o valor for maior que zero, deixando a regra de negócio mais protegida dentro da própria classe.

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