[Python] Dubbi su hash e set

Pietro Battiston toobaz a email.it
Mar 6 Maggio 2008 14:32:49 CEST


Francesco Guerrieri ha scritto:
> On Mon, May 5, 2008 at 9:20 AM, Pietro Battiston <toobaz a email.it> wrote:
>   
>> Pietro Battiston ha scritto:
>>  > enrico franchi ha scritto:
>>
>>     
>>>> On Sun, May 4, 2008 at 7:20 PM, Pietro Battiston <toobaz a email.it> 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


Maggiori informazioni sulla lista Python