[PIPython] primi passi con le classi
Paolo Mossino
mox79
Gio 26 Gen 2006 10:21:35 CET
Manuele Pesenti wrote:
> ciao
> vorrei fare un programma per il trattamento di alcuni tipi particolari
> di file per cui pensavo di creare una classe derivata dalla classe
> file... per potermi avvantaggiare dei metodi gią esistenti per la
> lettura dei file aggiungendone alcuni che hanno senso solo per il tipo
> di file in questione...
>
> in ogni caso ho cominciato a fare un esempio cretino di classe che crea
> un oggetto file che in realtą non ha niente in pił (per ora) di un file
> qualunque come segue:
>
> class prova (file):
> def __init__(self, filename):
> f = open(filename, 'r')
^^
Sbagliato, stai dichiarando una variabile locale a __init__ che non si
propaga alla classe "prova".
Dovevi scrivere
<code lang="python">
self.f = open(finelame, 'r')
</code>
> def leggiriga(f):
> f.readline()
^
Sbagliato perche' "f" e' l'istanza di "prova", dovevi scrivere:
<code lang="python">
def leggiriga(self):
self.f.readline()
</code>
Se vuoi estendere "file" per aggiungere il tuo metodo leggiriga, dovresti
fare qualcosa di simile:
E' comunque sbagliata la logica con cui lavori, dovevi fare qualcosa di simile:
<code lang="python">
class fe(file):
def __init__(self, *a, **kw):
super(fe, self).__init__(*a, **kw)
def leggi(self):
print self.readline()
a = fe('yum_list.txt')
a.leggi()
a.leggi()
a.leggi()
a.leggi()
</code>
Per inizializzare la superclasse, il metodo piu' pulito e' usare questa
sintassi:
>>> super(fe, self).__init__(*a, **kw)
Che si occupa di chiamare il metodo __init__ di tutte le superclassi,
nell'ordine giusto e una sola volta.
Dopo di che, la tua classe e' un'istanza regolare della superclasse e puoi
iniziare a definire nuovi metodi o fare override dei metodi esistenti.
My two cents,
--
,___, ~ Paolo Mossino (Alexander) e-m a il: mox79 a gmx.it ~
(0v0) ~ Jabber ID : alexander a jabber.linux.it - ICQ #: 28473944 ~
(_^((\ ~ "My crime is judging people by what they say and think, ~
-"-"-\\ ~ not what they look like" [Mentor's Last Words] ~
More information about the Python
mailing list