Print an attribute of several classes

Asked

Viewed 46 times

2

I am creating a program that will launch the establishment products and creating each product being an object already that they have type, name and price. I want to print a specific attribute of each object through a loop, for example, all prices on a list. Would it be possible? Another thing, do you think this is the best way to separate products? Or should you just create some vectors?

Just follow my code:

class Produtos:
    def __init__(self, tipo, nome, preco):
        self.tipo = tipo
        self.nome = nome
        self.preco = preco

    def produto(self):
        print(self.tipo)
        print(self.nome)
        print(self.preco)


expresso = Produtos("Café", "Expresso", 4.9)
cf_com_leite_medio = Produtos("Café", "Café com leite Médio", 5.7)
cf_com_chantilly = Produtos("Café", "Café com Chantilly", 8)
cf_duplo = Produtos("Café", "Café Duplo", 8.5)
cf_com_cointreau = Produtos("Café", "Café com Cointreau", 8.5)
cf_italiano = Produtos("Café", "Café Italiano", 8.5)
cpp_pequeno = Produtos("Café", "Cappuccino pequeno", 5.5)
cpp_grande = Produtos("Café", "Cappuccino grande", 8)
cpp_gelado = Produtos("Café", "Cappuccino Gelado", 14.5)
latte_macchiatto = Produtos("Café", "Latte Macchiatto", 7)

print(cf_com_leite_medio.tipo)
print(cf_com_chantilly.tipo)
  • A detail unrelated to the problem: if the class represents a single product, the name should be Produto (in the singular). By calling it Produtos (plural), this implies that it represents several products, which is not true. It may seem a silly detail, but giving better names helps a lot when programming :-)

  • Very good! Thanks for the tip

2 answers

2

Creating a variable for each product can make your code very extensive, difficult to understand and maintain.

The use of a list fits very well in this example, including to effect then the iteration in the products, either to display some property, add the total prices etc.


See, we create a list and each instance of the Products class is in a position in the list, so iterating and displaying the type property is much simpler:

class Produtos:
    def __init__(self, tipo, nome, preco):
        self.tipo = tipo
        self.nome = nome
        self.preco = preco

    def produto(self):
        print(self.tipo)
        print(self.nome)
        print(self.preco)

produtos = []

produtos.append( Produtos("Café", "Expresso", 4.9) )
produtos.append( Produtos("Café", "Café com leite Médio", 5.7) )
produtos.append( Produtos("Café", "Café com Chantilly", 8) )
produtos.append( Produtos("Café", "Café Duplo", 8.5) )
produtos.append( Produtos("Café", "Café com Cointreau", 8.5) )
produtos.append( Produtos("Café", "Café Italiano", 8.5) )
produtos.append( Produtos("Café", "Cappuccino pequeno", 5.5) )
produtos.append( Produtos("Café", "Cappuccino grande", 8) )
produtos.append( Produtos("Café", "Cappuccino Gelado", 14.5) )
produtos.append( Produtos("Café", "Latte Macchiatto", 7) )

for produto in produtos:
  print(produto.tipo)

See online: https://repl.it/repls/ForkedFrozenAutotote

  • Much better even, I will complete the list in my code. Thank you very much for the tip

1

Just put all your objects inside a list and scroll through a repeat structure for, thus:

expresso = Produtos("Café", "Expresso", 4.9)
cf_com_leite_medio = Produtos("Café", "Café com leite Médio", 5.7)
cf_com_chantilly = Produtos("Café", "Café com Chantilly", 8)

for produto in [expresso, cf_com_leite_medio, cf_com_chantilly]:
    print(produto.tipo)

To facilitate the process, instead of creating a variable for each object, add to a list already created each of its objects. Example:

produtos.append(Produtos("Café", "Expresso", 4.9))
produtos.append(Produtos("Café", "Café com leite Médio", 5.7))
produtos.append(Produtos("Café", "Café com Chantilly", 8))

for produto in produtos:
    print(produto.tipo)
  • Thank you very much for your reply

Browser other questions tagged

You are not signed in. Login or sign up in order to post.