1
resposta

CLASSE CONTA BANCÁRIA

class ContaBancaria:
    def __init__(self, titular, saldo):
        self.titular = titular
        self.saldo = saldo
        self._ativo = False

    def __str__(self):
        return f"Conta de {self.titular} - Saldo: R${self.saldo}"

    @classmethod
    def ativar_conta(cls, conta):
        conta._ativo = True


# Testando __str__ e ativação
conta1 = ContaBancaria("João", 1000)
conta2 = ContaBancaria("Maria", 500)
print(conta1)
print(conta2)

conta3 = ContaBancaria("Carlos", 200)
print(f"Antes de ativar: Conta ativa? {conta3._ativo}")
ContaBancaria.ativar_conta(conta3)
print(f"Depois de ativar: Conta ativa? {conta3._ativo}")


# Classe mais Pythonica com propriedades
class ContaBancariaPythonica:
    def __init__(self, titular, saldo):
        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


conta4 = ContaBancariaPythonica("Fernanda", 1500)
print(f"Titular da conta 4: {conta4.titular}")


# ClienteBanco completo com método de classe
class ClienteBanco:
    def __init__(self, nome, idade, endereco, cpf, profissao):
        self.nome = nome
        self.idade = idade
        self.endereco = endereco
        self.cpf = cpf
        self.profissao = profissao

    @classmethod
    def criar_conta(cls, titular, saldo_inicial):
        return ContaBancariaPythonica(titular, saldo_inicial)


cliente1 = ClienteBanco("Ana", 30, "Rua A", "123.456.789-01", "Backend")
cliente2 = ClienteBanco("Luiza", 25, "Rua B", "987.654.321-01", "Estudante")
cliente3 = ClienteBanco("Vinny Neves", 40, "Rua C", "111.222.333-44", "Frontend")

conta_cliente1 = ClienteBanco.criar_conta("Ana", 2000)
print(f"Conta de {conta_cliente1.titular} criada com saldo inicial de R${conta_cliente1.saldo}")
1 resposta

Oi, Luciano! Como vai?

Seu código ficou bem organizado e mostra uma boa compreensão sobre construtores, métodos de classe e uso de @property para encapsulamento. A separação entre a versão inicial da classe e a versão mais "pythônica" ficou clara e muito didática.

Uma dica interessante para o futuro é usar o método __repr__ além do __str__ para facilitar a visualização de objetos em listas ou ao usar print() em contextos de debug. Veja este exemplo:


class Conta:
    def __init__(self, titular, saldo):
        self.titular = titular
        self.saldo = saldo

    def __repr__(self):
        return f"Conta('{self.titular}', {self.saldo})"

Com isso, ao digitar print([conta1]), a saída será mais clara.
repr é usado para representar o objeto como string de forma descritiva.

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