Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre atributos de objetos

Boa tarde,

Gostaria de tirar um dúvida em relação a objetos e seus atributos.

Para treinar, resolvi criar uma classe de cotações para retornar as conversões, algo mais simples. O que diferenciaria de uma função fora da área de orientação a objetos é que o objeto receberia os valores de cada moeda (dólar, euro), e dentro da classe haveriam funções de conversão de acordo com os valores definidos.

O objetivo, com vários objetos criados, seria calcular a média da variação de uma certa moeda durante um tempo, ou seja, recebendo todos atributos "euro" e os colocasse em uma lista, desse modo ficaria fácil, afinal é só fazer a soma da lista dividido pelo seu tamanho.

Há algum modo direto de fazer isso, que o próprio programa oferece? Se não, há algum modo indireto, que moldemos para que isso aconteça?

class Cotacoes:
    def __init__(self, dolar, euro):  # cotações em relação ao real
        self.__dolar = dolar
        self.__euro = euro

    def mostrar_cotacoes(self):
        print("R$1.00 é igual U${:.2f} e €{:.2f} hoje.".format(self.__dolar, self.__euro))

    def dolar_para_real(self, quantos_dolares):
        total = quantos_dolares * self.__dolar
        print("U${:.2f} é igual a R${:.2f}".format(quantos_dolares, total))

    def euro_para_real(self, quantos_euros):
        total = quantos_euros * self.__euro
        print("€{:.2f} é igual a R${:.2f}".format(quantos_euros, total))

    def dolar_para_euro(self, quantos_dolares):
        relacao_dolar_euro = self.__dolar / self.__euro  # transformar dolar em 1 para euro
        total = relacao_dolar_euro * quantos_dolares
        print("U${:.2f} é igual a €{:.2f}".format(quantos_dolares, total))

    def euro_para_dolar(self, quantos_euros):
        relacao_euro_dolar = self.__euro / self.__dolar  # transformar euro em 1 para dólar
        total = relacao_euro_dolar * quantos_euros
        print("€{:.2f} é igual a U${:.2f}".format(quantos_euros, total))


cotacao1 = Cotacoes(4.76, 5.28)
cotacao2 = Cotacoes(4.81, 5.37)
cotacao3 = Cotacoes(4.71, 5.20)

# Gostaria de criar uma lista com todos os atributos self.__dolar
# Nesse caso => [4.76, 4.81, 4.71]
# E fazer a média: sum(lista) / len(lista)
# Há algum modo de fazer isso?
1 resposta
solução!

Se esse é um caso específico, você poderia simplesmente criar um getter para o atributo dolar e acrescentar seus valores em uma lista. Uma vez na lista, você poderá fazer uso de métodos como o len() e o sum().

Então seria algo como

list = [cotacao1.getdolar(), cotacao2.getdolar(), cotacao3.getdolar()]

Mas se o seu objetivo é que, a cada objeto de Cotacoes que for construído, o valor do dolar seja armazenado em uma lista, você poderia adicionar isso no construtor. Como exemplo:

list = list()
class Cotacoes:
    def __init__(self, dolar, euro):  # cotações em relação ao real
            self.__dolar = dolar
            self.__euro = euro
            list.append(dolar)

Ou então você até mesmo poderia criar uma classe específica para isso como "Lista de Cotações" e interagir com essa classe cada vez que o construtor for chamado. As possibilidades são infinitas!