[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