ciao:) On Dec 26, 2007 11:47 AM, ugaciaka <[EMAIL PROTECTED]> wrote: > Riassumendo: ho scritto un programmino (senza nessuna classe ma con > sole funzioni), ho notato che se passo da paramentro una variabile per > fargli capire al compilatore che non è una variabili d'istanza (cioé > della funzione) ma di tutto del corpo del programma devo anteporre > global al nome della variabile passata.
Quasi, in realtà se il nome che usi non è all'interno dello scope in cui ti trovi (per esempio non è definito nel corpo della funzione) viene cercato negli scope via via più esterni. Dalla documentazione: "he global statement is a declaration which holds for the entire current code block. It means that the listed identifiers are to be interpreted as globals. It would be impossible to assign to a global variable without global, although free variables may refer to globals without being declared global." Questo vuol dire che se tu ASSEGNI ad una variabile globale (quindi è il membro sinistro di un assegnamento) devi dichiararla global, altrimenti non serve. Quindi a = [1] def f(b): a.append(b) # Funziona, il nome a viene trovato nello scope esterno def g(b): a = b # questo nome "a" non è il nome globale, è un nome interno allo scope di g def h(b): global a a = b # questo invece cambia il nome globale. In genere è meglio evitare di usare variabili global... e per fortuna spesso ci si riesce e si ottiene un codice più pythonico :) > > Ok fin qua ci sono. Ma se io volessi ora mettere tutto in una classe > come agisco? Dove definisco le variabili globali? Nella classe? > All'interno del costruttore?... Il costruttore ( __init__ ) è una funzione che viene chiamata quando istanzi la classe ma non ha, a parte questo, uno status particolare. Le variabili le puoi definire come attributi dell'istanza def Prova(object): def __init__(self, a): self.my_var = a def a_little_method(self): print "my_var is ", self.my_var > #COSA INVECE VORREI FARE > #io vorrei invece fare solo, dopo aver creato la classe che ingloba i > miei metodi: > #oggetto=Classe(carattere_da_sostituire, carattere_sostituito) > #oggetto.rinomina_file() class Classe(object): def __init__(self, from, to): self.from = from self.to = to def rinomina_file(self, filelist): for name in filelist: print name.replace(self.from, self.to) Spero di essere stato abbastanza chiaro. ciao, Fra _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python