[PIPython] Mancanza overloading :-(

Gianmario Salvetti salvetti.gianmario
Ven 19 Nov 2004 15:16:51 CET


Grazie a tutti per le vostre risposte. Per errore, ho inviato una 
risposta all'indirizzo privato
di Lawrence Oluyede il quale di conseguenza mi ha risposto privatamente.
Per ragioni di completezza, riporto cio' che mi ha scritto e che non e' 
comparso sulla ML:


Gianmario:
def intersezione_Linea_Cerchio(o1, o2):
     pass

def intersezione_Linea_Linea(o1, o2):
     pass

def intersezione_Linea_Cerchio(o1, o2):
     pass

 
Lawrence:
Credo di aver capito cosa intendi dire. In maniera logica direi che
utilizzare l'overloading delle funzioni in questo caso potrebbe essere
errato perchè fai intersezione di oggetti diversi (e dunque presumo
che il corpo delle funzioni sia parecchio diverso da funzione a
funzione).
Una soluzione (brutta) potrebbe essere quella di usare:
def intersezione(o1, o2):
e all'interno della funzione controllare con isinstance o subclass di
che tipo di oggetti si tratta.
Un'altra potrebbe essere quella di avere N funzioni e ridurre il super
if ad un paio di line usando la funzione getattr()
Cosa ne dici?


Gianmario:
Alla prima soluzione ci avevo pensato anch'io ed in effetti e' proprio 
quello che voglio
evitare. La seconda mi attrae, ma non riesco bene a capire come 
utilizzare getattr(object, string)
per il mio scopo. Un piccolo esempio?
Grazie per la disponibilita'.

Lawrence:
Puoi fare una roba del tipo
foo = "linea"
bar = "cerchio"
temp = "insersezione_%s_%s" % (foo, bar)
f = getattr(self, temp)
f(o1, o2)

in questo modo variando le var foo e bar chiami la funzione corrispondente
passandogli le due istanze


Gianmario:
Ok, quindi potrei aggiungere un attributo agli oggetti e scrivere qualcosa
di simile:

str = "intersezione_%s_%s" % (o1.attributo, o2.attributo)
getattr(self, str)(o1, o2)

Grazie ancora a tutti.

Gianmario.



More information about the Python mailing list