Re: [Python] Approccio agli oggetti

2010-02-14 Per discussione Diego Barrera
Grazie a tutti,
i vostri consigli mi sono stati molto utili..
quindi vi posto il nuovo codice.. :)

code
#!/usr/bin/python

import os, myStringTool

class FilePrelievo(file):
def __init__(self,FileName):
self.myfile = open(FileName,'r')
self.dataSet=[]
self.linea=[]

   
def leggiLinea(self):
linea=self.myfile.readline()
l=linea.split(';')
newlista=[]
for x in l:
x=myStringTool.cleanInizio(x)
x=myStringTool.cleanFine(x)
newlista.append(x)
return newlista
   
def importaFile(self):
while self.linea['']:
self.linea=self.leggiLinea()
self.dataSet.append(self.linea)
if self.dataSet[-1]==['']:
self.dataSet=self.dataSet[:-1]

def stampa(self,myfile):
print  
myfile,---
for i in range(len(self.dataSet)):
print  myfile,! %s ! %s ! %s ! %s ! %s ! % \
(myStringTool.optString(self.dataSet[i][0],12),\
myStringTool.optString(self.dataSet[i][1],5),\
myStringTool.optString(self.dataSet[i][2],12),\
myStringTool.optString(self.dataSet[i][3],12),\
myStringTool.optString(self.dataSet[i][4],2))
print  myfile, 
---

 
prelievo=FilePrelievo('/home/diego/Scrivania/IndirizziCIP.csv')
prelievo.importaFile()
myfile=open('/home/diego/Scrivania/IndirizziCIP2.csv','w')
prelievo.stampa(myfile)
myfile.close
myfile=open('/home/diego/Scrivania/IndirizziCIP2.csv','r')
printer=os.popen('lpr','w')
printer.write(myfile.read())

\code


invece dentro myStringTool:

code

def cleanInizio(mystring):
if mystring=='': return mystring
if (mystring[0]==' ') :
mystring = cleanInizio(mystring[1:])
return mystring
else:
return mystring
   
def cleanFine(mystring):
if mystring=='': return mystring   
if (mystring[-1]==' ') or (mystring[-1]=='\n') :
mystring = cleanFine(mystring[:-1])
return mystring
else:
return mystring
   
def optString(stringa, lunghezza):
blank=' ' * lunghezza
stringa= (stringa + blank) [0:lunghezza]
return stringa
\code

Ciao a tutti
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-08 Per discussione Diego Barrera
Carlo C8E Miron ha scritto:
 Seh. Mai postare prima di colazione. Rifo.

 On Sun, Feb 7, 2010 at 13:02, Carlo C8E Miron carlo.mi...@gmail.com wrote:
   
 Ciao,
 prova con::

 2010/2/7 Diego Barrera diegonebarr...@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'?

Grazie, ciao diego
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-08 Per discussione Andrea Gasparini
Marco Giusti spiffera, alle Monday 08 February 2010 circa:
 ps. il codice non è testato ma credo (leggi spero :) che funzioni

- super(FilePrelievo, self)__init__(fileName, 'r')
+ super(FilePrelievo, self).__init__(fileName, 'r')


ciao ;)
-- 
-gaspa-
---
 https://launchpad.net/~gaspa -
- HomePage: http://gaspa.yattaweb.it --
-Il lunedi'dell'arrampicatore: www.lunedi.org -
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-08 Per discussione Enrico Franchi

On Feb 8, 2010, at 9:04 AM, Diego Barrera wrote:

 Non ho capito perche' devo fare cosi'..

Perche' quello che hai scritto tu non fa quello che tu pensi di avere scritto. 
:)

 la mia classe FilePrelievo eredita gli attributi e i metodi della classe 
 file, inoltre ha i vari attributi che definisco in __init__

Provando la tua classe, ti sarai anche accorto che tu in __init__ *non* 
definivi attributi ma solo
variabili locali. Che immagino non fosse quello che volevi.

 Quando poi definisco il metodo leggiLinea, passo come argomento proprio 
 self.. ma self.readline() chiamato da leggiLinea, non punta al file gia' 
 aperto.. perche'?


Vuoi il mio consiglio? Abbandona questo design. Ereditare da qualcosa e' 
introdurre
una relazione *molto* forte. E io, sinceramente, non ne vedo il bisogno in 
questo
caso.

La composizione e' decisamente piu' facile da gestire. Quando erediti, devi 
conoscere
in generale dettagli sulla classe da cui erediti. Ovvero, la classe da cui 
erediti deve
essere essenzialmente pensata per essere sottoclassata. In Python probabilmente
non si vede troppo la distinzione, ma in linguaggi come C++ questa cosa porta a 
bachi anche abbastanza evidenti o ad errori di compilazione (in Java).

Il problema e'... sei consapevole che se uno usa il tuo FilePrelievo come se 
fosse
un file (ed e' una cosa *assolutamente* legittima, visto che tu hai asserito 
che 
e' proprio un file) non usa le funzioni che tu avresti voluto aggiungere? 

Quindi hai chiesto che FilePrelievo sia un file, ma e' abbastanza ovvio che tu 
non
pianifichi di usarlo come un file.

Il metodo stampa poi e' pessimo: davvero poco generale e oltretutto non fa
nemmeno la cosa giusta. In Python ti consiglio di definire __str__ in modo 
che ti restituisca una rappresentazione human-readable del tuo oggetto in
forma di stringa. A margine non mi viene in mente nessuna rappresentazione
human readable buona di un oggetto che rappresenta un file, quindi forse
vuoi ridefinire __repr__... boh, questo e' quello che fa Python:

 print f
open file 'log.txt', mode 'r' at 0x1012c2ad0

Il motivo per cui stampa e' pessima e' che di fatto non fa nulla di utile. Se
f.stampa() fa *esattamente* print f, allora lascia print f e amen.
Almeno e' piu' generale nel senso che puoi scegliere dove stampare.


Entrando poi nel merito di MyStringTool:
1. eredita da object, please
2. non funziona come vuoi... i suoi metodi non hanno senso come metodi e 
tu li chiami sull'oggetto classe, non sull'istanza dell'oggetto.

Entrandoci dentro, il codice non funge... cose come 

mystring = CleanFine(mystring[:-1])

non hanno senso, a meno che tu non abbia definito altrove CleanFine.

In definitiva ti consiglio *davvero* di studiare su un qualunque manuale.
Almeno avresti codice in cui la semantica di quello che intendi corrisponde
con quella di Python.


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-08 Per discussione Diego Barrera
Enrico Franchi ha scritto:
 Vuoi il mio consiglio? Abbandona questo design. Ereditare da qualcosa e' 
 introdurre
 una relazione *molto* forte. E io, sinceramente, non ne vedo il bisogno in 
 questo
 caso.

   
Ok
 Il metodo stampa poi e' pessimo: davvero poco generale e oltretutto non fa
   
In realta' stampa era solo un test... ma doveva stampare la lista... 
l'ho incollato per errore
 Entrando poi nel merito di MyStringTool:
 1. eredita da object, please
 2. non funziona come vuoi... i suoi metodi non hanno senso come metodi e 
 tu li chiami sull'oggetto classe, non sull'istanza dell'oggetto.

 Entrandoci dentro, il codice non funge... cose come 

 mystring = CleanFine(mystring[:-1])

 non hanno senso, a meno che tu non abbia definito altrove CleanFine.

 In definitiva ti consiglio *davvero* di studiare su un qualunque manuale.
 Almeno avresti codice in cui la semantica di quello che intendi corrisponde
 con quella di Python.
   
In realta' mi sono studiato quasi tutto il manuale di Learning Python.. 
e le cose che voglio fare le so fare utilizzando la programmazione 
classica, pero' vorrei imparare la programmazione ad oggetti.. forse 
confondo un po' le funzioni con gli oggetti.
Comunque grazie mille, mi rimetto a provare sti benedetti oggetti :)
Ciao diego
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-08 Per discussione Giovanni Marco Dall'Olio
2010/2/8 Diego Barrera diegonebarr...@yahoo.it

 .. forse
 confondo un po' le funzioni con gli oggetti.


Ti puó aiutare pensare che un oggetto è come una struttura dati
personalizzata, qualcosa al livello delle liste, stringhe, tuple,
dizionari...
In effetti tutte queste cose in python sono oggetti, con metodi e proprietá
ben definiti.



 Comunque grazie mille, mi rimetto a provare sti benedetti oggetti :)
 Ciao diego
 ___
 Python mailing list
 Python@lists.python.it
 http://lists.python.it/mailman/listinfo/python




-- 
Giovanni Dall'Olio, phd student
Department of Biologia Evolutiva at CEXS-UPF (Barcelona, Spain)

My blog on bioinformatics: http://bioinfoblog.it
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


[Python] Approccio agli oggetti

2010-02-07 Per discussione Diego Barrera
Ciao a tutti, mi sto avvicinando alla programmazione OO.
Cortesemente qualcuno mi spiega perche' mi da errore la self.readline() 
dentro il metodo leggiLinea?
Dice che il file e' chiuso.. se la readline la faccio in __init__ nessun 
problema..
Ecco il codice

code

#!/usr/bin/python

class FilePrelievo(file):
def __init__(self,fileName):
self=open(fileName,'r')
dataSet=[]
linea=[]

def leggiLinea(self):
linea=self.readline()
lista=linea.split(';')
newlista=[]
for x in lista:
x=MyStringTool.CleanInizio(x)
x=MyStringTool.CleanFine(x)
newlista.append(x)
return newlista
   
def stampa(self):
print self
   
   
class MyStringTool:
def CleanInizio(self,mystring):
if (mystring[0]==' ') :
mystring = CleanInizio(mystring[1:])
return mystring
else:
return mystring
   
def CleanFine(self,mystring):
if (mystring[-1]==' ') or (mystring[-1]=='\n') :
mystring = CleanFine(mystring[:-1])
return mystring
else:
return mystring
 
prelievo=FilePrelievo('/home/diego/Scrivania/IndirizziCIP.csv')
prelievo.leggiLinea()
prelievo.stampa()

/code


___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-07 Per discussione Carlo C8E Miron
Ciao,
prova con::

2010/2/7 Diego Barrera diegonebarr...@yahoo.it:
 code

 #!/usr/bin/python

 class FilePrelievo(file):
    def __init__(self,fileName):
        file=open(fileName,'r')
        dataSet=[]
        linea=[]

    def leggiLinea(self):
        linea=self.file.readline()
[snip]

HTH, HAND
©
-- 
Carlo C8E Miron
self.self Seems Worster Solution Architect™
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-07 Per discussione Carlo C8E Miron
Seh. Mai postare prima di colazione. Rifo.

On Sun, Feb 7, 2010 at 13:02, Carlo C8E Miron carlo.mi...@gmail.com wrote:
 Ciao,
 prova con::

 2010/2/7 Diego Barrera diegonebarr...@yahoo.it:
 code

 #!/usr/bin/python

 class FilePrelievo(file):
    def __init__(self,fileName):
        self.file=open(fileName,'r')
^ il typo era qui!!1
        dataSet=[]
        linea=[]

    def leggiLinea(self):
        linea=self.file.readline()
 [snip]

 HTH, HAND
 ©
 --
 Carlo C8E Miron
 self.self Seems Worster Solution Architect™

[questo .sig e` perche` all'inizio avevo preservato il nome
dell'attributo, e quindi mi era venuto fuori un curioso self.self =
open(...]

Sorry again, e grazie al Pelatone™ per la segnalazione
©
-- 
Carlo C8E Miron
Thx Bald Bro Solution Architect™
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Approccio agli oggetti

2010-02-07 Per discussione Marco Giusti
On Sun, Feb 07, 2010 at 12:37:40PM +0100, Diego Barrera wrote:
 Ciao a tutti, mi sto avvicinando alla programmazione OO.
 Cortesemente qualcuno mi spiega perche' mi da errore la self.readline() 
 dentro il metodo leggiLinea?
 Dice che il file e' chiuso.. se la readline la faccio in __init__ nessun 
 problema..
 Ecco il codice
[cut]

se questo codice non ti serve per imparare python, usa il modulo csv
della libreria standard, credo che lo troverai utile.


-- 
Hofstadter's Law:
It always takes longer than you expect, even when you take into account
Hofstadter's Law.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python