[PIPython] polimorfismo in python
Tiziano Lattisi
tiziano
Ven 19 Nov 2004 15:16:45 CET
Ciao ciccio2000 (ci si vede anche qua!),
la cosa che vuoi fare al punto 1 funziona benissimo, ma non mi sembra
troppo elegante. Abitualmente vengono utilizzati dei default per
gestire la presenza di parametri opzionali per un metodo con segnature
diverse.
Per quanto riguarda il polimorfismo, puoi fare benissimo come fai in
Java. Generi una sottoclasse derivata e ridefinisci un metodo già
presente nella superclasse (per utilizzare alcuni termini java...).
(puoi anche fare overloading degli operatori)
Ovviamente questo potrebbe comportare una riprogettazione in parte
della tua applicazione, perché il polimorfismo è inteso come "stesso
metodo chiamato da oggetti diversi", quindi dovresti avere una classe
astratta "espressione", da cui generalizzi le sottoclassi... ma mi pare
che si vada fuori dal seminato rispetto al tuo codice originario.
In soldoni io vedo come soluzione migliore utilizzare metodi diversi
della tua classe per elaborare dati diversi, in qualche caso
"accorparne" qualcuno utilizzando i default (se il caso).
Se utilizzi invece la tecnica 1, non abusarne ;-)
ciao ciao
tiziano
Il giorno 19/mag/04, alle 04:38, Francesco Benincasa - ciccio2000 ha
scritto:
> Ciao a tutti,
> sto implementato in python (dopo averlo fatto in java) il pattern
> "visitor" con tecnica "double-dispatch":
> in soldoni la classe "Visitor" ha, in java, una serie di metodi
> "visit(TipoEspressione espressione)", uno per ogni tipo di espressione,
> in modo che, invocato dal metodo "accept" di una classe di espressioni
> qualunque,
> viene eseguita la "visit" corrispondente.
> Di fatto java vede quelle visit come metodi diversi, in base al tipo di
> parametro in ingresso.
> Essendo il python non staticamente tipato, non si specifica il tipo di
> parametro in ingresso ad un metodo.
>
> 1.Come potrei ovviare?
> Pensavo a qualcosa tipo degli if-elif-else utilizzando come condizioni
> qualcosa tipo: if type(espressione) == Tipo1, elif == Tipo2 e così via,
> ma non mi sembra molto elegante.
>
> 2.Se una cosa del genere con python non si può fare, in cosa consiste
> il
> polimorfismo in python?
>
> Grazie, ciao ciao.
>
> --
> | Francesco Benincasa - ciccio2000 - http://ciccio2000.altervista.org/
> | powered by Debian GNU/Linux 3.1 "unstable"
> ****
> Ho scoperto un modo infallibile per ingannare i diplomatici. Dico
> loro la
> verita' ed essi non mi credono.
> -- Camillo Di Cavour
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.zope.it/cgi-bin/mailman/listinfo/python
>
More information about the Python
mailing list