On Fri, Mar 22, 2013 at 09:05:45AM +0100, Gabriel Battaglia (Kriyaban) wrote: > questo probabilmente farà sorridere il 99% di chi mi legge, sono > abbastanza confuso dal termine self. > > class miaclasse(): > def metodo(self): #Perchè self? > self.a = 15 #di nuovo, perchè? Cosa succede se non lo metto? che cos'è > self.a?
Provo a cimentarmi in una risposta non rigorosa, vediamo se sarà efficace. Premetto una nota, 'self' non è una parola magica, potresti sostituirla con una altra parola e tutto funzionerebbe:: class Montagna(object): def __init__(me, name): me.name = name def chi_sono(me): print 'Monte', me.name (Questo NON è un suggerimento di sostituirla!) Pensa alle classi come a degli stampini che producono oggetti "uguali" sotto alcuni punti di vista (es.: hanno gli stessi metodi). m1 = Montaga('Bianco') m2 = Montaga('Ortles') è l'operazione con cui dallo stampino produci l'oggetto (istanza della classe). Ora se sei all'interno di un metodo, poniti il problema di riferirti a "il mio nome", quello della istanza. In virtù delle regole della visibilità dei nomi delle variabili di Python (che è forse la parte preliminare alla comprensione di questo argomento) 'print name' cercherebbe 'name' prima nelle variabili locali e poi in quelle globali, ma non negli attributi della istanza, questa esigenza è soddisfatta dalla scrittura self.nome (me.nome nell'esempio sopra) La convenzione è di referenziare l'oggetto col nome 'self' quando sei all'interno della classe stessa, ma questa convenzione è implementata nel fatto che ogni metodo è chiamato mettendo l'istanza come primo argomento, nulla di magico. Se -nella definizione del metodo- hai chiamato l'istanza 'self' necessariamente l'attributo dell'istanza sarà self.nome, se lo hai chiamto 'me', sarà me.nome. Spero ti sia di aiuto... sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.org SQLkit home page - PyGTK/python/sqlalchemy _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python