[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