[Python] Overloading "print"

Vittorio Spina vittorio.spina a gmail.com
Mar 4 Giu 2013 17:08:18 CEST


Il 04/06/2013 17:03, Federico Figus ha scritto:
> Ciao,
>
> l'override dell'istruzione print non č possibile in python 2.x, ma lo 
> č in python 3.x.
> Per aggirare il problema potresti definire un file-like object che 
> possieda almeno il metodo write, al cui interno ci implementi la 
> logica di scritura, ad esempio:
>
> import sys
> _stdout = sys.stdout
>
> class FaskeStdout(object):
>
> can_write = 1
>
> def write(self, data):
> if self.can_write:
> _stdout.write(data)
>
> sys.stdout = FakeStdout()
>
> print "stampa sullo stdout"
> sys.stdout.can_write = 0
> print "non stampa sullo stdout"
>
> La seconda soluzione sarebbe creare la tua funzione print con un alias 
> (e.g. print_log()) e modidicare tutto il codice con un semplice 
> find&replace, cosė potrai controllare la meglio tutta questa parte in 
> futuro.
ho pensato a fare un overloading perchč non e' semplice cambiare tutti i 
print con un find&replace.
la riga

    print "ciao mondo"

dovrebbe diventare

    print_log("ciao mondo")

e l'ultima parentesi tonda chiusa non saprei proprio come inserirla...
Con il file-like object del print ha funzionato, adesso ho un flag che 
funziona cosė:

    if not flag:
         print "Verbose is OFF!!!"
         from overloadprint import *
         sys.stdout=OverloadPrint()


dove overloading.py contiene il codice:

    class OverloadPrint():
         def write(self, text):
             pass

>
> Saluti,
> Federico F.
>
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python

-------------- parte successiva --------------
Un allegato HTML č stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130604/d22eeec1/attachment-0001.html>


Maggiori informazioni sulla lista Python