2015-03-03 13 views
6

Diciamo abbiamo le seguenti classi:Estendere il comportamento di una funzione ereditata in Python

class Base(object): 

    def load(self): 
     # do logic A 

     # do logic B 

class Child(Base): 

    def load(self): 
     # do logic C 

So decoratori possono essere utilizzati per estendere il comportamento funzione in Python, ma non so come posso applicarlo nel mio caso. Quando Child'sload() si chiama, come posso ottenere le seguenti esecuzioni di codice in questo ordine ?:

logic A 

logic C 

logic B 

Quello non voglio fare

class Base(object) 

    def logicA() 
     pass 

    def logicB() 
     pass 

    def load() 
     pass 

class Child(Base): 

    def load(self): 
     super.logicA() 

     # do logic C 

     super.logicB() 

voglio solo codificare fino logica C, senza dover chiamare esplicitamente la logica A e B

+2

logica Split A e B in a due diverse funzioni? – thefourtheye

risposta

3

Intendi qualcosa del genere:

class Base(object): 

    def load(self): 
     print('do logic A') 
     print('do logic B') 


class Child(Base): 

    def load(self): 
     super().load() 
     print('do logic C') 


c = Child() 
c.load() 

questo stampa:

do logic A 
do logic B 
do logic C 

L'unico altro modo mi viene in mente è questa:

class Base(object): 

    def load(self): 
     print('do logic A') 
     self.new_logic() # call new logic from child class, if exist. 
     print('do logic B') 

    def new_logic(self): 
     # overwrite this one in child class 
     pass 


class Child(Base): 

    def new_logic(self): 
     print('do logic C') 


c = Child() 
c.load() 

Questo stampa:

do logic A 
do logic C 
do logic B 
+0

Chiudi, ma sto cercando di chiamare la logica C prima di B – starhacker

+0

Ma il fatto è che non voglio chiamare esplicitamente la logica A o B ... la logica C è fondamentalmente solo un'estensione del carico di base() – starhacker

+1

@ Unit978 Stai dicendo che vuoi eseguire la funzione figlio nel mezzo della funzione delle classi di base? –

Problemi correlati