Metodo classi python

di il
3 risposte

Metodo classi python

Salve a tutti sto provando a capire dove è il problema nel mio codice riguardante un esercizio potete aiutarmi?
testo:
definire una classe per modellare un carrello acquisti di uno shop online. definire una classe per modellare un item vendita con ID e prezzo.
Il carrello deve contenere una lista di oggetti item, un ID e l' ID_utente:
-scrivere un metodo per il carrello che calcoli il totale del costo degli oggetti
- scrivere un metodo per il carrello che aggiunga un item al carrello
(il problema che non comprendo è come mai il metodo total non funziona dicendomi che class item non ha come attributo prezzo)

class item :
            def __init__(self, ID_oggetto, prezzo):
                self.ID_oggetto = ID_oggetto
                self.prezzo = prezzo
            
            def scheda_oggetto(self):
                return f"{self.ID_oggetto} {self.prezzo}"          
                 
               

class shop:
    def __init__(self, ID, ID_utente, items):
        self.ID = ID
        self.ID_utente = ID_utente
        self.items = []  
        
    
    def total(self):
        if (len(self.items)>0):
            return sum(item.prezzo)  
     
                
    def add_item ( self, item):
        if item:
            self.items.append(item)
        else:
            print('non ho nuovi item')
        
def main():
    c = ' '
    carrello = []
    while len(c)>0:
        print('    ISTRUZIONI    ')
        print('i) inserisci categoria')
        print('a) aggiungi item 1')
        print('b) aggiungi item 2')
        print('z) stampa spesa totale')
        print('v) stampa tutti')
      
        
        c = input('scegli: ')
        
        if c == 'i':
            n = input('ID: ') #           numero id carrello
            l = input ('ID_utente: ')# es.giulio.busolini
            m = input ('items: ') # es.   articoli vari 
            s = shop(n,l,m)
            carrello.append(s)
            
        elif c == 'a':
            for s in carrello:
                print ('aggiungi a carrello: ')
                k = input ("id_oggetto: ") # es. fionda
                d = input("prezzo: ")# es.       12 
                d = int(d)
                z = item(k,d)
                s.add_item(z)
                z.scheda_oggetto
    
        elif c == 'b':
            print('aggiungi a carrello: ')
            f = input('id_oggetto: ')# es. yo-yo
            w = input('prezzo: ')# es.     3
            w = int(w)
            u = item(f,w)
            s.add_item(u)
            
            
        elif c == 'z':
            somma = s.total()
            print(somma)
            
        elif c == 'v':
            for s in carrello :
                    print(s.ID, s.ID_utente,m, z.scheda_oggetto())
                    print(s.ID,s.ID_utente,m, u.scheda_oggetto())

3 Risposte

  • Re: Metodo classi python

    Non va bene.
    Hai 3 oggetti

    1) lo shop/negozio, con
    1.1) una lista di carrelli, uno per ogni cliente. Non puoi avere 2 carelli per lo stesso cliente,
    1.2) una lista di prodotti, con id, descrizione e prezzo. Se la descrizione non c'e' va bene lo stesso

    2) un carello assegnato ad un utente con la lista dei prodotti acquistati. Uno potrebbe acquistare anche 3 prodotti uguali, non solo 1

    3) il prodotto

    Ora devi identificare le operazioni per OGNI oggetto. Ad esempio, se cambia il prezzo del prodotto ed un utente lo ha nel carrello, che cosa succede?
  • Re: Metodo classi python

    
        def total(self):
              s = 0;
              for i in range(len(self.items)):
                s += self.items[i].prezzo
              return s
    
    Per il resto ha ragione migliorabile - devi rivedere l'impostazione generale
  • Re: Metodo classi python

    Meglio così o non ho capito cosa mi volevate dire?
    
      c = ' '
        carrello = []
        while len(c)>0:
            print('    ISTRUZIONI    ')
            print('i) apertura carrello')
            print('a) aggiungi item ')
            print('z) stampa spesa totale')
            print('v) stampa tutti')
          
            
            c = input('scegli: ')
            
            if c == 'i':
                n = input('ID: ') #           numero id carrello
                l = input ('ID_utente: ')# es.giulio.busolini
                m = input ('items: ') # es.   articoli vari 
                s = shop(n,l,m)
                carrello.append(s)
                
            elif c == 'a':
                for s in carrello:
                    print ('aggiungi a carrello: ')
                    k = input ("id_oggetto: ") # es. fionda
                    d = input("prezzo: ")# es.       12 
                    d = int(d)
                    z = item(k,d)
                    s.add_item(z)
        
                
            elif c == 'z':
                somma = s.totale()
                print(somma)
                
            elif c == 'v':
                for s in carrello :
                        print(s.ID,s.ID_utente)
                        for z in s.items:
                            print(z.ID_oggetto,z.prezzo)
Devi accedere o registrarti per scrivere nel forum
3 risposte