On Jan 22, 2008 5:22 PM, fde <[EMAIL PROTECTED]> wrote: > Ciao, > non ho ancora ben chiaro come funzionano le classi. > Vi spiego il problema: > sto scrivendo una gui con wx, ho una finestra topwindow con delle > finestre figlie (wx.frame), fra queste voglio prenderne una e farne > derivare un'altra perchè la finestra è identica ma ha una funzione > differente... (la prima aggiunge la secodna modifica un dato). > Quindi ho fatto: > class frameB(frameA): > blah=ciao > self.textCtrlPinco.SetValue("blah") > > ma non funziona perchè non mi trova l'oggetto self.textCtrlPinco che in > teoria dovrebbe aver ereditato da frameA..perchè ? > qualche aiuto ? > > Ciao Quando chiami un metodo di un'istanza di una classe, l'istanza stessa viene passata come primo argomento della chiamata e il nome self nei parametri della funzione gli viene quindi associato. Questo nome è convenzionale (anche se è una forte convenzione). Avresti potuto chiamarlo anche s, foo, quello che vuoi. Esempio: class Prova(object): def __init__(nome_a_scelta): nome_a_scelta.valore = 1
p = Prova() print p.valore Ne segue che non puoi riferirti a self.qualcosa se non sei all'interno di un bound method il cui primo parametro sia chiamato self! Semplificando un po' la chiamata a un metodo di un'istanza puoi pensarla cosi': NomeDellaClasse.metodo(Istanza, argomenti della chiamata) per questo motivo se scrivi class Prova(object): def __init__(): pass (senza self) fare p = Prova() ti darà un errore caratteristico: Traceback (most recent call last): File "<input>", line 1, in <module> TypeError: __init__() takes no arguments (1 given) Quale argomento hai passato in Prova()? risposta: hai passato l'istanza stessa :-) Quindi nel tuo caso, quando subclassi devi fare qualcosa del genere: class A(object): def __init__(self): # un po' di inizializzazioni class B(A): def __init__(self): A.__init__(self) # un altro po' di inizializzazioni. E qui dentro puoi riferirti a self, che è il nome dell'istanza nello scope di un bound method. Spero di averti chiarito un po' le idee. Non ho sottomano Python in a nutshell dove queste cose sono scritte molto meglio, ma su internet troverai moltissime spiegazioni di questo meccanismo. Se hai altri dubbi, chiedi pure. ciao, Francesco
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python