class Fornitore: def __init__(self, c, n, e, lp, lf): print('sono in __init__ di istanza fornitori') self.codice=c self.nome=n self.email=e self.lsprodotti=lp self.lsfatture=lf def __str__(self): return f"codice: {self.codice}\nnome: {self.nome}" @property def codice(self): print("passo dal getter del codice fattura") return self._codice # consente di assegnare un valore alla property codice @codice.setter def codice(self, valore): print("passo dal setter del codice della fattura") if not isinstance(valore, str): raise TypeError("il codice deve essere di tipo stringa") if len(valore) !=3: raise ValueError("lunghezza del codice non valida") self._codice = valore #f1=Fornitore('001','alfa srl') #rende l'attributo lista prodotti @property def lsprodotti(self): return self._lsprodotti # consente di assegnare una lista alla lista prodotti @lsprodotti.setter def lsprodotti(self, lp): print('sono in lsprodotti') if not isinstance(lp, list): raise TypeError("la lista prodotti deve essere di tipo lista") for p in lp: if not isinstance(p,str): raise TypeError(f"{p} non è di tipo stringa") if len(p)==0: raise ValueError(f"un prodotto non avere lunghezza 0") self._lsprodotti = lp @property def lsprodotti(self): return self._lsprodotti # consente di assegnare una lista alla lista prodotti @lsprodotti.setter def lsprodotti(self, lp): print('sono in lsprodotti') if not isinstance(lp, list): raise TypeError("la lista prodotti deve essere di tipo lista") for p in lp: if not isinstance(p,str): raise TypeError(f"{p} non è di tipo stringa") if len(p)==0: raise ValueError(f"un prodotto non avere lunghezza 0") self._lsprodotti = lp #rende l'attributo nome di sola lettura @property def lsfatture(self): return self._lsfatture @lsfatture.setter def lsfatture(self, lf): print('sono in lsfatture') if not isinstance(lf, list): raise TypeError("la lista fatture deve essere di tipo lista") for f in lf: if not isinstance(f,Fatture): raise TypeError(f"{f} non è di tipo stringa") self._lsprodotti = lf #rende l'attributo email di sola lettura @property def email(self): return self._email # consente di assegnare un valore all'email @email.setter def email(self, e): if not isinstance(e, str): raise TypeError("la mail deve essere di tipo stringa") parti=e.split("@") if len(parti)!=2: raise Exception("la mail non contiene il carattere @ oppure ne contiene più di una") else: dominio=parti[1] parti_dominio= dominio.split('.') if (len(parti_dominio)<2 or # se le parti sono meno di 2, non c'è il punto nel dominio len(parti_dominio[0])==0 or # il dominio comincia con un punto len(parti_dominio[-1])<2 #l'ultima parte del dominio deve essere lunga almeno 2 caratteri ): raise Exception("il dominio della mail non è valido") self._email = e def elenco_prodotti(self): if len(self._lsprodotti)>0: for p in self._lsprodotti: print(p) else: print(f"il fornitore {self.nome} non ha prodotti") def aggiungi_lista_prodotti(self, lst): if type(lst)!=list: raise TypeError("devi sarmi una lista") for p in lst: self.aggiungi_prodotto(p) def aggiungi_prodotto(self, p): if type(p)!=str: raise TypeError("il prodotto deve essere di tipo stringa") if len(p)>0: ''' dare un warning se il prodotto esiste già nella lista ''' if p in self._lsprodotti: print(f"{p} già presente:ignorata") else: self._lsprodotti.append(p) else: print("ignorata stringa vuota") def aggiungi_fattura(self, f): if not isinstance(f, Fatture): raise TypeError("deve essere un oggetto della classe fattura") ''' dare un warning se il prodotto esiste già nella lista ''' if f in self._lsfatture: print(f"{f} già presente:ignorata") else: self._lsfatture.append(f) def togli_prodotto(self, p): pass class Fattura: last_code=1 #attributo di classe, condiviso da tutte le istanze def __init__(self): print('sono in __init_ di istanza Fattura') self.progressivo=self.last_code #attributo di istanza Fattura.last_code+=1 def __str__(self): return f"numero_fattura:{self.progressivo} last_code:{Fattura.last_code}" # un utilizzatore della classe Fonitore scriverebbe le seguenti istruzioni f1=Fornitore('001','alfa srl',"alfasrl@gmail.it", [],[]) f2=Fornitore('002','Beta Spa',"betaspa@libero.it", ['pere','kiwi','uova'],[]) ft1=Fattura() ft2=Fattura() ft3=Fattura()