Francesco Guerrieri ha scritto: > On Mon, May 5, 2008 at 9:20 AM, Pietro Battiston <[EMAIL PROTECTED]> wrote: > >> Pietro Battiston ha scritto: >> > enrico franchi ha scritto: >> >> >>>> On Sun, May 4, 2008 at 7:20 PM, Pietro Battiston <[EMAIL PROTECTED]> wrote: >>>> >> >> >> >> >> >>> (O intendi qualcos'altro? Io per ora del tipo "set" sto usando update, >> >>> remove, add, metodi che non vorrei dover ridefinire) >> >>> >> >> >> >> E non ridefinirli. Delegali. >> >> Vabbé che "Google is my friend", ma certo sei un tantinello criptico >> (immagino si evinca dai miei messaggi precedenti quanto io sia poco >> esperto di Python)? >> >> "delegare" significa in pratica "richiamare esplicitamente il metodo di >> libreria all'interno del metodo che si ridefinisce"? Tipo >> >> class nonderivata(): >> def __fai_questo__(self): >> set.__fai_questo__(self) >> >> ? >> >> Se sì, che ci guadagno?! >> Se no, che vuol dire?! >> > > > Ciao, spero di non aggiungere confusione. Se fosse così, cancellate > il mio messaggio :) > > Ho letto rapidamente il thread, forse un semplice esempio può essere utile: > > >>>> class my_list(list): >>>> > ... def append(self, val): > ... print "ciao", val > ... list.append(self, val) > ... > >>>> prova=my_list([1,2,3]) >>>> prova >>>> > [1, 2, 3] > >>>> prova.reverse() >>>> prova >>>> > [3, 2, 1] > >>>> prova.append(4) >>>> > ciao 4 > >>>> prova >>>> > [3, 2, 1, 4] > > Come vedi my_list eredita da list, a cui delega tutti i metodi, > ad esempio __repr__ e reverse, e invece sovrascrive, > in una maniera veramente stupida, il metodo append.
Purtroppo questo non mi schiarisce affatto le idee, perché questo "delegare" era più o meno quello che facevo io (ereditare i metodi implicitamente, quando vanno bene quelli di libreria), ma dalle email di Enrico mi ero convinto che delegare volesse dire un'altra cosa (che lui mi consiglia di fare, ma di cui non ho ancora afferrato i vantaggi), e cioé, se ho capito bene, "esplicitare" questo utilizzo dei metodi di libreria tramite la non-ereditarietà, qualcosa come, riprendendo il tuo esempio: class my_list(): def __init__(self): self.campo_lista=list() def append(self, val): self.campo_lista.append(val) Ora io non voglio tediare la lista con cose che saranno note a tutti coloro che vivono di programmazione ad oggetti, ma se ci fosse un link in cui trovare cosa significa esattamente delegare ma soprattutto perché mi converrebbe, questo esaurirebbe i miei dubbi. (per ora) Pietro _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python