[Python] Sovrascrittura di metodi.
Enrico Franchi
enrico.franchi a gmail.com
Gio 31 Mar 2011 10:08:08 CEST
Walter Valenti wrote:
> 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()
Le due cose sono in contraddizione. Quel metodo *non* viene chiamato in
maniera statica e stai creando esplictamente un oggetto Pluto.
Infatti scrivi Pluto(), che e' esattamente l'istanziazione di un oggetto
di tipo Pluto.
> Il metodo "metodo1" di Pluto č semplicemente definito cosė:
> class Pluto:
> def metodo1(self):
> pass
E confermi che non e' un metodo "statico" o un "class-method".
> 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.
Non capisco cosa vuoi fare. Se vuoi fare Monkey Patching (cosa che e' di
per se una pessima idea) puoi farlo nel modo piu' banale: riassegni
all'attributo che contiene il metodo una nuova funzione.
Se vuoi fare una cosa ancora peggiore, ovvero avere una classe il cui
comportamento dipende dal call-stack... Preferisco non pensarci nemmeno.
Comunque piuttosto che ridefinire, devi prevedere la cosa e analizzare
dove sei chiamato.
Altrimenti fai cose piu' blande tipo gli oggetti Pluto in main *non* li
crei con il costruttore normale ma attraverso una funzione (al limite
definita in main) che li patcha al volo. Ma ribadisco... io rivedrei il
design.
--
.
..: -enrico-
Maggiori informazioni sulla lista
Python