2015-03-03 17 views
6

en aşağıdaki sınıfları var diyelim:Python bir kalıtsal fonksiyon davranışını genişletilmesi

Ben dekoratörler Python işlev davranışını uzatmak için kullanılabilir ama ben bunu uygulamak nasıl bilmiyorum biliyorum
class Base(object): 

    def load(self): 
     # do logic A 

     # do logic B 

class Child(Base): 

    def load(self): 
     # do logic C 

benim durumumda. Child'sload() çağrıldığında, bu sıra ?: Ben

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() 

yapmak istemiyorum Ne

logic A 

logic C 

logic B 

Ben sadece ayak kod istiyorum aşağıdaki kod infaz nasıl alabilirim mantık C, mantıksal olarak A ve B'yi çağırmak zorunda kalmadan, mantıksal olarak A ve B'yi çağırmak zorunda kalmadan,

+2

Bölünmüş mantık A ve B

do logic A do logic B do logic C 

Aklıma gelen tek yolu bu biridir iki farklı fonksiyona mı? – thefourtheye

cevap

3

Şunun gibi bir anlama gelir:

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() 

Bu yazdırır:

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() 

Bu baskılar:

do logic A 
do logic C 
do logic B 
+0

Kapat, ama mantık C'yi B – starhacker

+0

'den önce çağırmayı hedefliyorum. Fakat şey, mantıksal A veya B'yi çağırmak istemiyorum ... mantık C temel olarak sadece Temel yükün bir uzantısıdır() – starhacker

+1

@ Ünite978 Çocuk fonksiyonunun temel sınıf fonksiyonunun ortasında yürütmesini istediğinizi söylüyorsunuz? –