Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

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, ativo):
        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'Conta de {self.titular} | saldo disponivel: R${self.saldo}'

conta1 = ContaBancaria('Jose', 2000)
conta2 = ContaBancaria('Maria', 5000)
  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.
def ativar_conta(self):
        self._ativo = True

conta3 = ContaBancaria('Joao', 600)
print(f'Antes de ativar: Conta Ativa? {conta3._ativo}')
conta3.ativar_conta()
print(f'Depois de ativar: Conta ativa? {conta3._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):
        self._titular = titular
        self._saldo = saldo
        self._ativo = False

    @property
    def tiular(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
  1. Crie uma instância da classe e imprima o valor da propriedade titular.
conta4 = ContaBancaria('Pedro', 3000)
print(f'Titular da conta 4: {conta4.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, nome, idade, rua, cpf, telefone):
        self.nome = nome
        self.idade = idade
        self.rua = rua
        self.cpf = cpf
        self.telefone = telefone

cliente1 = ClienteBanco(nome= 'Fernado', idade=32, rua= 'rua A', cpf='123.456.789-01', telefone= '(66)2833-0412')
cliente2 = ClienteBanco(nome='Fernada', idade=29, rua='rua b', cpf='074.633.830-91', telefone='(74) 3753-8133')
cliente3 = ClienteBanco(nome='Domitilia', idade=59, rua='rua c', cpf='073.387.600-55', telefone='(73) 3585-3844')
  1. Crie um método de classe para a conta ClienteBanco.
class ClienteBanco:
    
    @classmethod
    def criar_conta(cls, titular, saldo_inicial):
        return cls(titular, saldo_inicial)

conta_cliente1 = ClienteBanco.criar_conta('Tuany', 2500)
print(f'Conta de {conta_cliente1.titular} criada com saldo inicial de R${conta_cliente1.saldo}')
1 resposta

Oi, Apollo! Como vai?

Você avançou por vários conceitos fundamentais de Orientação a Objetos em Python, como a criação de classes, construtores com o método def __init__, propriedades com @property, métodos especiais como __str__ e o uso de @classmethod. Trabalhar com classes como ContaBancaria e ClienteBanco, definindo atributos como titular, saldo, ativo, nome, idade, cpf, rua e telefone, é uma excelente forma de consolidar esses conhecimentos na prática.

Vale destacar que você já aplicou a abordagem mais "pythonica" ao utilizar atributos prefixados com _ e acessá-los por meio de propriedades, o que demonstra uma boa evolução no seu aprendizado.

Fique atento a alguns pontos importantes. No primeiro construtor da classe ContaBancaria, o parâmetro ativo não é necessário, pois o atributo já inicia como False de forma fixa. Na definição das propriedades, há um pequeno erro de digitação no nome da propriedade titular, que foi escrita como tiular. Por fim, o método de classe criar_conta precisa estar alinhado com o construtor da classe ClienteBanco, que recebe nome, idade, rua, cpf e telefone, e não titular e saldo.

Uma dica valiosa para o futuro é utilizar @classmethod para criar objetos com valores padrão, tornando o código mais organizado e reutilizável. Veja este exemplo:


class ContaBancaria:
    @classmethod
    def criar_conta_padrao(cls, titular):
        return cls(titular, 0)

Nesse exemplo, o método cria uma nova conta com saldo inicial igual a 0, evitando a repetição desse valor sempre que uma nova instância for criada. Esse tipo de recurso deixa o seu código mais limpo e fácil de manter.

Após corrigir esses pontos, você conseguiu rodar o código completo sem erros? Compartilhe aqui como ficou o resultado final!

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