1
resposta

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

  1. 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.
class ContaBancaria:
    def __init__(self, titular = '', saldo = 0):
        self._titular = titular
        self._saldo = saldo
        self._ativo = False
  1. 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.
    def __str__(self):
        return f"titular: {self._titular} | saldo: R$ {self._saldo}"
conta1 = ContaBancaria("João", 2000)
conta2 = ContaBancaria("Maria",1500)

print(conta1)
print(conta2)
  1. 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. x
    def ativar_conta(self):
        self._ativo = True
conta1.ativar_conta()
print(conta1._ativo)
  1. Refatore a classe ContaBancaria para utilizar a abordagem "pythonica" na criação de atributos. Utilize propriedades, se necessário.
class ContaBancaria:
    def __init__(self, titular = '', saldo = 0):
        self._titular = titular
        self._saldo = saldo
        self._ativo = False
    
    def __str__(self):
        return f"titular: {self._titular} | saldo: R$ {self._saldo}"

    def ativar_conta(self):
        self._ativo = True

    @property
    def titular(self):
        return self._titular

    @property
    def saldo(self):
        return self._saldo
    
    @property
    def ativo(self):
        return "ativo" if self._ativo else "inativo"
  1. Crie uma instância da classe e imprima o valor da propriedade titular.
conta1 = ContaBancaria("André", 100)
print(conta1.titular)
  1. 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.

class ClienteBanco:
    def __init__(self, cpf='', nome='', idade=int, sexo='', profissao=''):
        self.cpf = cpf
        self.nome = nome
        self.idade = idade
        self.sexo = sexo
        self.profissao = profissao


cliente1 = ClienteBanco("123456789.12", "Luiz", 25, "Masculino", "Desenvolvedor")
cliente2 = ClienteBanco("113766789.52", "José", 31, "Masculino", "Médico")
cliente3 = ClienteBanco("513461319.17", "Ariana", 19, "Feminino", "Advogado")
  1. Crie um método de classe para a conta ClienteBanco.
@classmethod
def associar_conta(cls, cliente, saldo):
         conta = ContaBancaria(cliente.nome, saldo)
         return conta
conta1 = ClienteBanco.associar_conta(cliente1, 1000)
print(conta1)
1 resposta

Olá, Luiz. Como vai?

Parabéns pela excelente resolução dos exercícios! Você demonstrou um ótimo entendimento sobre os pilares da Orientação a Objetos em Python, especialmente no uso de encapsulamento com o prefixo _ (indicando atributos protegidos) e na aplicação de propriedades para tornar o código mais "pythônico".

Gostaria de destacar alguns pontos técnicos importantes que podem ajudar a deixar seu código ainda mais refinado:

  • Métodos de Classe vs. Métodos de Instância: No seu exercício de ativar_conta, você criou um método que altera o estado de uma conta específica através do self. Isso é um método de instância. Se o objetivo fosse um @classmethod, ele geralmente seria usado para operações que pertencem à classe como um todo ou para criar novas instâncias (como você fez corretamente no desafio do ClienteBanco).
  • Representação de Ativos: A sua propriedade @property def ativo ficou muito boa ao retornar "ativo" ou "inativo". Essa é uma técnica excelente para transformar dados brutos em informações legíveis para quem consome a classe.
  • Tipagem no Construtor: No construtor de ClienteBanco, você usou idade=int. Em Python, isso define o valor padrão como sendo a própria classe int. Se a intenção era apenas indicar o tipo, o ideal seria usar Type Hints, como idade: int = 0.

Para complementar seu aprendizado, deixo uma sugestão de refatoração para o método associar_conta dentro da classe ClienteBanco. Para que ele funcione como um método de classe real, ele precisa estar indentado dentro da classe:

class ClienteBanco:
    # ... construtor ...

    @classmethod
    def associar_conta(cls, cliente, saldo):
        # Aqui estamos usando a classe ContaBancaria para criar um novo objeto
        return ContaBancaria(cliente.nome, saldo)

Além disso, notei um pequeno detalhe na indentação da sua propriedade @property def ativo dentro do bloco de código. Verifique se ela está no mesmo nível de recuo dos outros métodos para evitar erros de sintaxe no seu ambiente de desenvolvimento.

Seu progresso com Python está muito sólido! Continue explorando como as classes podem interagir entre si, como você fez ao associar um cliente a uma conta.

Espero que possa ter lhe ajudado!