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