2014/1/5 Raffaele Salmaso <raffa...@salmaso.org>
> 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