1
resposta

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

class ContaBancaria:
    def __init__(self, titular, saldo):
        self._titular = titular.title() # Abordagem protegida (_)
        self._saldo = saldo
        self._ativo = False

    # 2. Método especial __str__
    def __str__(self):
        status = 'Ativa' if self._ativo else 'Inativa'
        return f'Conta de {self._titular} | Saldo: R${self._saldo:.2f} | Status: {status}'

    # 3. Método para ativar a conta
    # Nota: Usei método de instância pois ativa UMA conta específica.
    def ativar_conta(self):
        self._ativo = True

    # 4. Propriedades (Getters) - Abordagem Pythonica
    @property
    def titular(self):
        return self._titular

    @property
    def saldo(self):
        return self._saldo

    @property
    def ativo(self):
        return self._ativo

# --- Testando os desafios 1 a 5 ---

# Instâncias
conta1 = ContaBancaria('guilherme', 1500.50)
conta2 = ContaBancaria('sarah', 3000.00)

# Imprimindo (usa o __str__)
print(conta1)
print(conta2)

# Ativando conta e verificando
conta1.ativar_conta()
print(f'A conta de {conta1.titular} está ativa? {conta1.ativo}')

# 5. Imprimindo apenas o titular via propriedade
print(f'Propriedade titular: {conta2.titular}')

class ClienteBanco:
    def __init__(self, nome, idade, cpf, email, profissao):
        self.nome = nome
        self.idade = idade
        self.cpf = cpf
        self.email = email
        self.profissao = profissao

    # 7. Método de classe
    @classmethod
    def criar_cadastro_basico(cls, nome, cpf):
        """Cria um cliente apenas com nome e CPF, atributos essenciais."""
        return cls(nome, 0, cpf, 'Não informado', 'Não informada')

    def __str__(self):
        return f'Cliente: {self.nome} | Profissão: {self.profissao}'

# 6. Instanciando 3 objetos
cliente1 = ClienteBanco('Ana Silva', 28, '123.456.789-00', 'ana@email.com', 'Dev')
cliente2 = ClienteBanco('Bruno Souza', 35, '987.654.321-11', 'bruno@email.com', 'Designer')
cliente3 = ClienteBanco('Carla Dias', 22, '456.123.789-22', 'carla@email.com', 'Gerente')

# Testando o método de classe
cliente_novo = ClienteBanco.criar_cadastro_basico('Marcos Viz', '111.222.333-44')

print(cliente1)
print(cliente_novo)
1 resposta

Oii, Moacir!

Mais uma vez, sua resolução demonstra que você não está apenas seguindo instruções, mas pensando como um desenvolvedor. Gostei muito das decisões que você tomou no código.

Vou destacar três pontos onde você foi além do básico e mostrou maturidade técnica:

  1. Senso Crítico (método de instância vs. classe)

Você fez uma observação perfeita no comentário:

# Nota: Usei método de instância pois ativa UMA conta específica.

Você está certíssimo! O enunciado do exercício pedia um "método de classe", mas semanticamente, ativar uma conta altera o estado de um objeto específico (self._ativo), e não da classe inteira. Se fosse um @classmethod, você não teria acesso ao self. Ótima correção!

  1. Formatação

No seu método __str__, você usou uma Expressão Condicional (Ternária):

status = 'Ativa' if self._ativo else 'Inativa'

Isso é muito elegante e evita blocos if/else desnecessários. Além disso, a formatação de moeda R${self._saldo:.2f} mostra cuidado com a apresentação dos dados.

Continue firme nos estudos.

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