Credo sia un esempio di come aggiungere un attributo (in questo caso un metodo, cioe’ una funzione) ad una classe a posteriori.
Cioe’ di come prendere una classe gia’ definita in precedenza ed aggiungerci il metodo.
Se il metodo cuoci fosse stato definito fin dall’inizio, sarebbe venuta fuori una cosa cosi’
class Cibo:
def __init__(self, proteine=0, carboidrati=0, grassi=0):
self.proteine = proteine
self.carboidrati = carboidrati
self.grassi = grassi
def calcolaCalorie(self):
return (self.proteine * 4 + self.carboidrati * 4 + self.grassi * 9)
def cuoci(self):
self.cotta = True
Ma nell’esempio questa operazione e’ successiva, quindi Beri ci mostra come definire la funzione fuori dalla classe e poi come collegarla alla classe.
Quindi prima definiamo la nostra funzione
def cuoci_cibo(self):
self.cotta = True
e poi usiamo setattr per collegarla alla classe.
setattr vuole 3 parametri:
- la classe (o l’oggetto)
- il nome dell’attributo
- il valore dell’attributo
setattr(Cibo, "cuoci", cuoci_cibo)
Cibo e’ la classe
“cuoci” e’ il nome del metodo
cuoci_cibo e’ il metodo
OK, ora cuoci e’ diventato un metodo di Cibo , quindi lo possiamo richiamare con l’oggetto pasta
pasta.cuoci()
![]()
In questo esempio, Beri ha definito la funzione usando un nome e poi il metodo usando un nome diverso:
cuoci_cibo o e cuoci
Ma … suppongo che a te interessi anche vedere se funziona usando lo stesso nome … ![]()
class Cibo:
def __init__(self, proteine=0, carboidrati=0, grassi=0):
self.proteine = proteine
self.carboidrati = carboidrati
self.grassi = grassi
def calcolaCalorie(self):
return (self.proteine * 4 + self.carboidrati * 4 + self.grassi * 9)
pasta = Cibo(proteine=12, carboidrati=72, grassi=1)
def cuoci(self):
self.cotta = True
setattr(Cibo, "cuoci", cuoci)
pasta.cuoci()
print(pasta.cotta)
… Pare che funzioni … ![]()
Ciao !



