[Python] Approccio agli oggetti
Marco Giusti
marco.giusti a gmail.com
Lun 8 Feb 2010 10:29:48 CET
On Mon, Feb 08, 2010 at 09:04:05AM +0100, Diego Barrera wrote:
> Carlo C8E Miron ha scritto:
> > Seh. Mai postare prima di colazione. Rifo.
> >
> > On Sun, Feb 7, 2010 at 13:02, Carlo C8E Miron <carlo.miron a gmail.com> wrote:
> >
> >> Ciao,
> >> prova con::
> >>
> >> 2010/2/7 Diego Barrera <diegonebarrera a yahoo.it>:
> >>
> >>> <code>
> >>>
> >>> #!/usr/bin/python
> >>>
> >>> class FilePrelievo(file):
> >>> def __init__(self,fileName):
> >>> self.file=open(fileName,'r')
> >>>
> > ^ il typo era qui!!1
> [cut]
>
> Non ho capito perche' devo fare cosi'..
> la mia classe FilePrelievo eredita gli attributi e i metodi della classe
> file, inoltre ha i vari attributi che definisco in __init__
> Quando poi definisco il metodo leggiLinea, passo come argomento proprio
> self.. ma self.readline() chiamato da leggiLinea, non punta al file gia'
> aperto.. perche'?
perché in realtà quando crei la classe `FilePrelievo` non puoi fare::
self = open(filename, 'r')
perché non assegni al'istanza di `FilePrelievo` il nuovo file descriptor
ma invece fai un `rebind` della variabile self. di seguito ti scrivo una
possibile soluzione
#!/usr/bin/python
import sys
class FilePrelievo(file):
separator = ';'
def __init__(self, fileName):
# invoca il costruttore e quindi questa istanza
# ha associato veramente un file descriptor ora
super(FilePrelievo, self)__init__(fileName, 'r')
# queste non le usi ...
# dataSet=[]
# linea=[]
def leggiLinea(self):
linea = self.readline()
if linea:
return map(str.strip, linea.split(self.separator))
return linea
# lista=linea.split(';')
# newlista=[]
# for x in lista:
# x=MyStringTool.CleanInizio(x)
# x=MyStringTool.CleanFine(x)
# newlista.append(x)
# return newlista
def stampa(self, stream=sys.stdout):
print >> stream, self
fp = FilePrelievo('temp')
li = []
while 1:
l = fp.leggiLinea()
if l:
li.append(l)
else:
break
fp.close()
print li
come vedi sono molte linee in meno. python è bello per questo, in poco
ottieni tanto :)
ti conviene cercare qualche buona guida di python in linea, ne troverai
tante. quella che viene (veniva?) consigliata sempre a chi proviene da
altri linguaggi è diveintopython e in più ho visto che ne hanno scritta
una anche per python3.
comunque ti ripeto (non so' se hai ricevuto la mia precedente email) che
ti conviene usare il modulo `csv` se questo non vuole essere solo un
esercizio per imparare python.
ciao
m.
ps. il codice non è testato ma credo (leggi spero :) che funzioni
--
Hofstadter's Law:
It always takes longer than you expect, even when you take into account
Hofstadter's Law.
Maggiori informazioni sulla lista
Python