[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