[Python] derivare una classe
Francesco Guerrieri
f.guerrieri a gmail.com
Mar 22 Gen 2008 19:30:56 CET
On Jan 22, 2008 5:22 PM, fde <filiderba a email.it> 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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: http://lists.python.it/pipermail/python/attachments/20080122/f0fc5f82/attachment.htm
More information about the Python
mailing list