[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