[Python] Salve.
Alessandro Dentella
sandro a e-den.it
Ven 22 Mar 2013 10:42:24 CET
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
Maggiori informazioni sulla lista
Python