[Python] Dubbi su hash e set
enrico franchi
enrico.franchi a gmail.com
Lun 5 Maggio 2008 11:51:06 CEST
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)?
Non è questione di esperienza di Python. E' una tecnica iper-standard
di programmazione agli oggetti.
Tipicamente quando progetti una qualunque gerarchia di classi una
delle prime domande che ti devi porre è se usare ereditarietà o
composizione (tipicamente l'ereditarietà è spesso usata a sproposito).
Quando usi composizione spesso fai anche delega (specie nei casi in
cui eri in lizza con l'ereditarietà pubblica).
> "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?!
Kind of. In effetti *non* è come dici, ma ci vai vicino. Il caso base sarebbe
class my_obj(object):
def __init__(self):
self.contents = set()
def foo(self):
return self.contents.foo()
Ovviamente visto che Python è un linguaggio dinamico non hai necessità
di farlo veramente ma puoi semplicemente scrivere il codice per
generare questo codice per i metodi di interesse.
Cosa ci guadagni? E' la solita banale fra "is a" e "has a". Quando usi
ereditarietà per modellare una relazione di has-a, stai chiedendo
guai. Comunque non credo sia il caso di fare qui un mini-corso di
fondamenti di progettazione ad oggetti e non conosco risorse
direttamente in Python per farlo.
Potrei indicarti alcuni articoli di Martins
http://www.objectmentor.com/resources/articles/lsp.pdf
e già che ci siamo:
http://www.objectmentor.com/resources/articles/ocp.pdf
--
-enrico
Maggiori informazioni sulla lista
Python