Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Fiz alguns ajustes, queria ver se alguém pode ajudar a melhorar o código

class ContaCorrente:

    def __init__(self, numero, titular, saldo, limite):
        self.limite = limite
        print("Criando conta...{}".format(self))
        self.__numero = numero  # O underscors duplo "__" e utilizado para mostrar ao desenvolvedor que é uma conta privada, e não deve ser alterado os valores dos atributos acessando-os diretamente.
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        dia = 10
        mes = 8
        ano = 2021


    @property
    def extrato(self, dia=10, mes=8, ano=2021):
        print('Saldo de {:.2f}$, para o titular {} referente a {}'.format(self.__saldo, self.__titular, f'{dia:02d}/{mes:02d}/{ano:02d}'))


    def depositar(self, valor):
        self.__saldo += valor

    def sacar(self, valor):
        self.__saldo -= valor

    def transferir(self, valor, destino):
        self.sacar(valor)
        self.depositar(valor)

    @property
    def saldo(self):
        return self.__saldo
    @saldo.setter
    def saldo(self, saldo):
        self.__saldo = saldo

    @property
    def titular(self):
        return self.__titular.title() # "title()" é usado para que a primeira letra do titular fique maiúscula, caso haja erro na escrita.
    @titular.setter
    def titular(self, titular):
        self.__titular = titular

    @property # E usado para substituir a função "()", ficando mais fácil e rápido rodar o código.
    def limite(self):
        return self.__limite
    @limite.setter # Usado para substituir o "set_limite" tornando a funçao mais rapida.
    def limite(self, limite):
        self.__limite = limite

Quis modificar para que ele mostra-se a data no extrato, gostaria que dessem uma olhada se tem como melhorar essa implementação

Esta dando uma adivertencia pra mim também por causa da forma como a data foi colocada. (Getter should return or yield something). Queria saber se tem algum problema deixar assim.

4 respostas

Oi Gulherme! Vou tentar ajudar.

Seu método extrato(self) não precisa de um decorador @property, pois ele é usado para retornar o valor de atributos sem precisar chamá-los diretamente. Não existe atributo extrato no construtor da sua classe, logo não há necessidade de um @property.

A forma que você imprimiu a data no método extrato(self) realmente ficou duplicado. Não há porque você definir valores padrões para os parâmetros dia, mes, ano (na verdade não precisa nem os definir), pois eles já estão sendo criados no método construtor, com o mesmo valor. O que você pode fazer é excluir essa linha de código: dia=10, mes=8, ano=2021, e se referir aos próprios atributos da classe. E caso você queira, você também poderia transformar esses atributos em valores que são definidos pelo usuário quando se define o objeto.

No pedaço de código:

def transferir(self, valor, destino):
            self.sacar(valor)
            self.depositar(valor)

Você não está usando o valor "destino". O que você está fazendo é tirar o valor da sua conta e depois colocando esse mesmo valor de novo na mesma conta. Lembre-se que self se refere ao objeto atual. Então destino seria o objeto que o dinheiro iria (esse objeto tem que existir), então você teria que fazer algo como:

def transferir(self, valor, destino):
            self.sacar(valor)
            destino.depositar(valor)

Onde o objeto de destino agora está utilizado e modificado.

Espero ter ajudado :)

Muito obrigado cara, melhorou demais meu codigo, eu só nao entendi essa parte: "E caso você queira, você também poderia transformar esses atributos em valores que são definidos pelo usuário quando se define o objeto." eu realmente gostaria de colocar a data para que ela mesma se auto atualiza-se, e não ficar mudando.

solução!

O que eu quis dizer foi que você pode colocar a data como variaveis no metodo construtor, por exemplo:

def __init__(self, numero, titular, saldo, limite, dia, mes, ano):
        self.limite = limite
        print("Criando conta...{}".format(self))
        self.__numero = numero  # O underscors duplo "__" e utilizado para mostrar ao desenvolvedor que é uma conta privada, e não deve ser alterado os valores dos atributos acessando-os diretamente.
        self.__titular = titular
        self.__saldo = saldo
        self.__limite = limite
        self.dia = dia
        self.mes = mes
        self.ano = ano

Dessa forma o usuario poderia colocar a data que quisesse quando criasse o objeto.

minha_conta = ContaCorrente(7, "Ethan", 1000, 2500, 8, 10, 2021)

E no caso de você querer que a data se atualize, você poderia dar uma olhada na documentação das bibliotecas datetime e time. Elas permitem que você manipule data e hora de diversas formas. Qual usar vai depender do que você quer fazer, e me desculpe se não sei te dizer qual das duas seria melhor no seu caso.

datetime documentation: https://docs.python.org/pt-br/3/library/datetime.html#module-datetime

time documentation: https://docs.python.org/pt-br/3/library/time.html

Tranquilo cara, já me ajudou demais vou dar uma pesquisada nesse arquivo pra entender mais sobre. vlw demais

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software