[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