ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | Espressioni | Comandi | Funzioni | Moduli | Classi | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
Corso Python
Python: Classi e Oggetti
Caratteristiche
Namespace
Classi
Istanze
Ereditarietà
Uso
Ereditarietà Multipla
Eccezioni
Conclusioni


<<< Ereditarietà >>>

Fin qui abbiamo visto le classi, ma gran parte del loro potere viene dal fatto che è possibile creare nuove classi "recuperando" (ovvero ereditando) il comportamento di classi preesistenti. La classe da cui si eredita viene chiamata "classe base".

Vediamo un esempio di classe derivata, ottenuta estendendo il Num per ottenere un Punto (bidimensionale). Ecco come:

class Punto(Num):    
    def __init__(self,x,y):
        Num.__init__(self,x)
        self.m = y      
    def inc(self, k):
            Num.inc(self,k)
            self.m = self.m + k

Notare che nella definizione di classe occorre specificare la classe base tra parentesi. Il comportamento è simile ad avere la definizione di tutti i campi e i metodi della classe base inclusi nella definizione della classe derivata.

La classe derivata eredita tutti i metodi e i campi della classe base. È possibile chiamare esplicitamente i metodi della classe base, specificandoli per nome, incluso il nome della classe base. Per esempio questo viene fatto in Num.__init__ e in Num.inc. Lo scopo è quello di recuperare il comportamento del metodo della classe base.

Notare che Punto.inc ha lo stesso nome e gli stessi parametri del metodo della classe base. Il nuovo metodo sostituisce a tutti gli effetti il vecchio metodo. Questo comportamento viene talvolta descritto dicendo che tutti i metodi sono "virtuali" cioè possono essere sostituiti da nuove implementazioni nelle classi derivate.

Naturalmente nel corpo di un nuovo metodo è ancora possibile chiamare il vecchio metodo utilizzando esplicitamente il nome della classe base.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com