2015-03-03 5 views
6

मान लीजिए कि हम निम्न वर्गों करते हैं:पायथन में एक विरासत समारोह के व्यवहार का विस्तार

class Base(object): 

    def load(self): 
     # do logic A 

     # do logic B 

class Child(Base): 

    def load(self): 
     # do logic C 

मैं जानता हूँ कि सज्जाकार पायथन में समारोह व्यवहार का विस्तार करने के लिए इस्तेमाल किया जा सकता है, लेकिन मैं नहीं जानता कि मैं इसे कैसे लागू कर सकते हैं मेरे मामले में। जब Child'sload() कहा जाता है, मैं कैसे इस आदेश ?:

logic A 

logic C 

logic B 

क्या मैं नहीं

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

क्या करना चाहते हैं मैं सिर्फ ऊपर कोड करने के लिए चाहते हैं में निम्न कोड फांसी प्राप्त कर सकते हैं लॉजिक सी, स्पष्ट रूप से तर्क ए और बी

+2

स्प्लिट तर्क ए और बी में

do logic A do logic B do logic C 

केवल अन्य तरह से मैं के बारे में सोच सकते हैं कि यह एक है दो अलग-अलग कार्यों के लिए? – thefourtheye

उत्तर

3

का मतलब यह है कि आप ऐसा कुछ मानते हैं:

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

यह प्रिंट होगा:

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

यह प्रिंट:

do logic A 
do logic C 
do logic B 
+0

बंद करें, लेकिन मैं बी – starhacker

+0

से पहले तर्क सी को कॉल करने का लक्ष्य रख रहा हूं लेकिन बात यह है कि, मैं स्पष्ट रूप से तर्क ए या बी को कॉल नहीं करना चाहता हूं ... तर्क सी मूल रूप से केवल बेस लोड का विस्तार है() – starhacker

+1

@ यूनिट 9 78 आप कह रहे हैं कि आप बेस क्लास फ़ंक्शन के बीच में निष्पादित करने के लिए बच्चे को फ़ंक्शन करना चाहते हैं? –

संबंधित मुद्दे