1
resposta

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

# 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.

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

# 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.

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

    def __str__(self):
        return f"O titular da conta é {self.titular}, paralelamente, o saldo da conta é de {self.saldo}"
    
conta_1 = ContaBancaria("João", 15000)
print(conta_1)

conta_2 = ContaBancaria("Ravi", 16000)
print(conta_2)

# 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.

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

    def __str__(self):
        return f"O titular da conta é {self.titular}, paralelamente, o saldo da conta é de {self.saldo}"
    
    @classmethod

    def ativar_conta(cls, conta):
        conta._ativo = True
        print(f"A conta foi ativada.")

conta_3 = ContaBancaria("Gael", 20000)
print(conta_3)
ContaBancaria.ativar_conta(conta_3)

# 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):
        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

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

conta_4 = ContaBancaria("Arthur", 30000)
print(conta_4.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.

class ClienteBanco:

    def __init__(self, nome, idade, profissao, renda, CPF):
        self.nome = nome
        self.idade = idade
        self.profissao = profissao
        self.renda = renda
        self.CPF = CPF
        ClienteBanco.clientes.append(self)

cliente_1 = ClienteBanco("Noah", 28, "Médico", 8000, "123.456-78")    
cliente_2 = ClienteBanco("Aurora", 25, "Dentista", 7300, "235.985-33") 
cliente_3 = ClienteBanco("Ariel", 24, "Arquiteta de software", 8000, "325.174-33")

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

class ClienteBanco:

    clientes = []
    def __init__(self, nome, idade, profissao, renda, CPF):
        self.nome = nome
        self.idade = idade
        self.profissao = profissao
        self.renda = renda
        self.CPF = CPF
        ClienteBanco.clientes.append(self)

    @classmethod
    def desconto_de_taxas(cls):
        for fregues in cls.clientes:
            if fregues.renda > 7500:
                print("Parabéns! Você se encontra na lista de indivíduos selecionados nos descontos de taxas do banco.")

cliente_1 = ClienteBanco("Noah", 28, "Médico", 8000, "123.456-78")  
cliente_2 = ClienteBanco("Aurora", 25, "Dentista", 7300, "235.985-33") 
cliente_3 = ClienteBanco("Ariel", 24, "Arquiteta de software", 8000, "325.174-33")

ClienteBanco.desconto_de_taxas()
1 resposta

Oi, Guilherme! Como vai?

Ficou ótimo o jeito como você aplicou os conceitos de método de classe, __str__ e uso de propriedades. A estrutura da ContaBancaria está bem organizada, e o uso do @property trouxe mais clareza ao encapsulamento dos atributos.

Uma dica interessante para o futuro é usar o método __repr__ para fornecer uma representação mais precisa do objeto — útil para 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})"

conta = Conta("Jade", 2500)
print(conta)

Esse código mostra a representação da conta no formato 'Conta('Jade', 2500)'.

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