Re: [Python] Semplice domanda sulle classi.

2014-01-09 Per discussione Diego Barrera

Il 09/01/2014 12:51, Gabriele Battaglia ha scritto:
GB: Ciao e grazie per la tua preziosa mail, ricca di commenti a 
margine che danno spunti tutt'altro che marginali.
Non so a che manuale tu ti stia riferendo, quelli presenti fra la 
documentazione di www.python.it li ho praticamente scorsi tutti, più 
qualche altro libro in inglese e quelli di Marco beri... Ma non 
importa sapere quale sia, il concetto mi è chiaro, ho capito 
l'importanza di avere un metodo di inizializzazione, mentre ancora mi 
sfugge il vantaggio di ereditare da object, questo però, a causa della 
mia conoscenza insufficiente di Python, imparerò via via che apprendo.

Buona lettura ;)

http://www.python-it.org/contenuti/10/06/22/un-nuovo-stile-per-le-classi


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


Re: [Python] Semplice domanda sulle classi.

2014-01-09 Per discussione Gabriele Battaglia

From: "enrico franchi" 

2014/1/5 Raffaele Salmaso 



class Veicoli:
> ruote = 4
>
> Auto = Veicoli()
> Auto.ruote = 5





 class Veicoli(object):
  def __init__(self, ruote=4):
self._ruote = ruote



Giusto visto che nessuno lo ha menzionato in modo esteso e vale
definitivamente una precisazione.
Siccome c'e' un noto manuale (che dovrebbe venire *deprecato* brutalmente)
che introduce le cose come le stai facendo, mi viene il sospetto che tu lo
stia seguendo (e te lo sconsiglio vivamente).
GB: Ciao e grazie per la tua preziosa mail, ricca di commenti a margine che 
danno spunti tutt'altro che marginali.
Non so a che manuale tu ti stia riferendo, quelli presenti fra la 
documentazione di www.python.it li ho praticamente scorsi tutti, più qualche 
altro libro in inglese e quelli di Marco beri... Ma non importa sapere quale 
sia, il concetto mi è chiaro, ho capito l'importanza di avere un metodo di 
inizializzazione, mentre ancora mi sfugge il vantaggio di ereditare da object, 
questo però, a causa della mia conoscenza insufficiente di Python, imparerò 
via via che apprendo.


Dimentichiamo la tua definizione di classe. Sul manuale maledetto, *prima*
ti fa vedere qualcosa tipo (nb, siccome quella classe rappresenta *un*
veicolo e non una collezione di veicoli, tanto vale chiamarlo veicolo):


GB: A mia parziale discolpa posso dire che ho scritto in fretta, soloper 
chiarire il concetto di properties. In uno script serio, l'avrei forse fatta 
meglio... :) col suo bravo __init__(self):
Per sottintendere che capisco il concetto di classe come fabbrica di oggetti, 
l'avevo chiamata Veicoli, al plurare, mentre Auto, era l'oggetto appartenente 
alla classe veicoli, il che è corretto anche da un punto di vista logico e 
semantico.


Bene, grazie ancora, ho letto con interesse tutto ciò che mi hai consigliato e 
ne farò tesoro.
GB. 


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


Re: [Python] Semplice domanda sulle classi.

2014-01-08 Per discussione enrico franchi
2014/1/5 Raffaele Salmaso 


> class Veicoli:
> > ruote = 4
> >
> > Auto = Veicoli()
> > Auto.ruote = 5
>


>  class Veicoli(object):
>   def __init__(self, ruote=4):
> self._ruote = ruote


Giusto visto che nessuno lo ha menzionato in modo esteso e vale
definitivamente una precisazione.
Siccome c'e' un noto manuale (che dovrebbe venire *deprecato* brutalmente)
che introduce le cose come le stai facendo, mi viene il sospetto che tu lo
stia seguendo (e te lo sconsiglio vivamente).

Queste cose qua sopra *non* sono parenti. Il modo corretto e' quello che ti
fa veder Raffaele.

Dimentichiamo la tua definizione di classe. Sul manuale maledetto, *prima*
ti fa vedere qualcosa tipo (nb, siccome quella classe rappresenta *un*
veicolo e non una collezione di veicoli, tanto vale chiamarlo veicolo):

class Veicolo:
pass

auto = Veicolo()
auto.ruote = 4

Ecco, questo *non* e' come si lavora normalmente in Python (ne e' buona
programmazione ad oggetti). Ovvero e' veramente brutto usare come pratica
normale quella di instanziare oggetti grosso modo vuoti e poi appiccicare
gli attributi fuori. Questo e' il mestiere del costruttore. Ovvero si fa
come suggerisce Raffaele.

class Veicolo(object):
  def __init__(self, ruote=4):
self.ruote = ruote

Fine della fiera. Note a margine... Raffaele usa un valore di default per
il parametro del costruttore. Quando la cosa ha senso, e' conveniente
farlo. Non e' obbligatorio.

Seconda nota a margine: eredita da object. Se usi Python 2, *fallo*.
Spiegarti perche' prende un po' troppo spazio, se ne e' parlato altre volte
in lista e un manuale moderno e decente te lo chiarisce ampiamente.

Quindi:

a. class Veicolo(object): # -> buono
b. class Veicolo: # -> cattivo

Quando scrivi

class Veicoli:
ruote = 4

fai una cosa che e' chiaramente *non* quello che vuoi fare. Ovvero assegni
l'attributo alla classe e non all'istanza (la differenza e' rilevantissima
ed e' bene che sia chiara). In particolare, appena ti trovi ad avere come
attributo un oggetto mutabile (e.g., una lista, un dizionario, un normale
oggetto python) ti troverai con una profusione di bachi apparentemente
inspiegabili.

Note ancora piu' a margine... normalmente in Python le variabili sono
minuscole, le classi sono Maiuscole, le costanti sono TUTTE_MAIUSCOLE. E'
una convenzione piuttosto rispettata e semplifica la lettura del codice.

Per discutere sull'opportunita' di controllare il numero di ruote tramite
una property, sono ormai fuori dal foglio. ;)


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


Re: [Python] Semplice domanda sulle classi.

2014-01-06 Per discussione Gabriele Battaglia
Grazie a tutti! Meravigliosi, come sempre.
GB.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Semplice domanda sulle classi.

2014-01-05 Per discussione Carlos Catucci
>
> P.S. Per Gabriele: si tratta di una macchina agricola a 5 ruote.
>

Nossignore, trattasi della notissima legge i Ohm: ogni quattro Ohm una Ohm
di scorta (in dialetto abruzzese rende meglio)

Carlos
-- 
"Somos los que amasan, sin embargo no tenemos pan,
somos los que cavan el carbón, sin embargo tenemos frío
somos los que no tienen nada, y estamos viniendo a tomar el mundo."
Tassos Livaditis (Poeta greco, 1922, 1988)
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Semplice domanda sulle classi.

2014-01-05 Per discussione Marco Beri
2014/1/5 Raffaele Salmaso 

> if ruote not in (4,6, 8):
>   raise ValueError('no')
>

Gravissimo errore! :-)

http://www.poettinger.at/img/landtechnik/schwadkreisel/fahrwerk722.jpg

Ciao.
Marco.
P.S. Per Gabriele: si tratta di una macchina agricola a 5 ruote.
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Semplice domanda sulle classi.

2014-01-05 Per discussione Raffaele Salmaso
2014/1/5 Gabriele Battaglia :
> Ciao.
> Ho questo quesito, da principiante, sulle classi.
>
> Creo la mia fabbrica di automobili:
>
> class Veicoli:
> ruote = 4
>
> Per ora mi accontento e mi compro subito una macchina:
>
> Auto = Veicoli()
>
> Ora, siccome sono un tipo innovativo, mi metto li ed applico una modifica 
> alla mia vettura nuova:
>
> Auto.ruote = 5
>
> Domanda: posso inserire del codice, nella classe, che forzi i dati membri ad 
> assumere solo determinati valori, e non altri?
> Ad esempio, in questo caso, Auto.ruote potrebbe sollevare una eccezione o 
> essere aggiustato via codice ad un altro valore.
@property (ah, hai cambiato solo la classe, ma il codice che la usa
non serve cambiarlo ;) )


class Veicoli(object):
  def __init__(self, ruote=4):
self._ruote = ruote

  @property
  def ruote(self):
return self._route
  @ruote.setter
  def ruote(self, ruote):
if ruote not in (4,6, 8):
  raise ValueError('no')
self._ruote = ruote

Auto = Veicoli()
Auto.ruote = 5



-- 
| Raffaele Salmaso
| http://salmaso.org
| https://bitbucket.org/rsalmaso
| http://gnammo.com
___
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python


Re: [Python] Semplice domanda sulle classi.

2014-01-05 Per discussione Diego Barrera

On 05/01/2014 00:22, Gabriele Battaglia wrote:

Ciao.
Ho questo quesito, da principiante, sulle classi.

Creo la mia fabbrica di automobili:

class Veicoli:
 ruote = 4

Per ora mi accontento e mi compro subito una macchina:

Auto = Veicoli()

Ora, siccome sono un tipo innovativo, mi metto li ed applico una modifica alla 
mia vettura nuova:

Auto.ruote = 5

Domanda: posso inserire del codice, nella classe, che forzi i dati membri ad 
assumere solo determinati valori, e non altri?
Ad esempio, in questo caso, Auto.ruote potrebbe sollevare una eccezione o 
essere aggiustato via codice ad un altro valore.
Grazie.

La strada e' quella di sovrascrivere il comportamento di default 
dell'assegnamento per l'attributo specifico.
Cioe' devi scrivere una metodo che viene richiamato ogni volta che viene 
assegnato un valore all'attributo specifico.


http://docs.python.org/2/library/functions.html#property

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