[Python] Sovrascrittura di metodi.

Walter Valenti waltervalenti a yahoo.it
Gio 31 Mar 2011 10:48:11 CEST


>
>ho un modulo, chiamato per es:  esempio.py
>>All'interno ho definito diverse classi. Es: Pippo, Pluto, ecc...
>>Pippo possiede un metoto che in determinate condizione richiama in maniera "statica" (ovvero senza istanziare esplicitamente un oggento Pluto)
>>un metodo di Pluto, ovvero esegue;
>>Pluto().metodo1()
>>
>>Il metodo "metodo1" di Pluto è semplicemente definito così:
>>class Pluto:
>>     def metodo1(self):
>>          pass
>>
>>
>>Questo modulo "esempio.py" viene richiamato all'interno di un file "main.py" con un classico "from xxx import esempio".
>>E' possibile in qualche modo all'interno di main.py ridefinire il metodo1 di Pluto, in maniera tale che quando viene richiamato
>>all'interno di esempio.py venga eseguita la nuova definizione.
>>Da notare che in main.py non eseguitò mai il metodo1 di Pluto, ma questo viene eseguito solo all'interno di esempio,py da un istanza
>>di Pippo.
>>
>
>
>Walter,
>questo si chiama monkey patching e, a dire la verità, è una pratica da sconsigliare (tranne che in casi veramente eccezionali).
>
>
>Nel tuo caso nel main puoi scrivere:
>
>
>from esempio import Pippo
>>def _newmethod(self):
>>    print "Ciao"
>>Pippo.metodo1 = _newmethod
>
>
>Ma, ti ripeto, io non lo farei.
>Ciao.
>Marco.
>

L'ho risolto in altro modo:
al costruttore di Pippo in main.py passo un istanza di una classe Topolino dove ho definito i miei metodi.
Nel modulo esempio.py viene eseguito il metodo di questa istanza di Topolino. Sparisce la classe Pluto


Walter


      


Maggiori informazioni sulla lista Python