2013-04-18 8 views
18

मेरे पास एक कक्षा है, ए, जिसे अन्य वर्गों के समूह द्वारा विरासत में मिला है। इनमें से कुछ में कुछ फ़ंक्शन हैं जो समान हैं और यह अच्छा होगा कि उन कार्यों को कहीं और परिभाषित किया जाए और उन वर्गों द्वारा बुलाया जाए जिन्हें उनकी आवश्यकता है। लेकिन उन कार्यों को सुपर क्लास में परिभाषित कार्यों को कॉल करें।पायथन - क्या यह बाहरी फ़ंक्शन को पास करना ठीक है

class A(): 
    def imp_func(*args): 
     # called by the child class functions 

Class B(A): 
    def common_func(self): 
     # some stuff 
     self.imp_func(*args) 

तो मैं अपने सहायक कार्य करता है जो एक तर्क के रूप self object ले बनाया है और मैं सहायक कार्यों अंदर से imp_func कॉल कर सकते हैं।

def helper_func(obj, some_args): 
    # some common stuff 
    obj.imp_func(*args) 

class B(A): 
    def common_func(self): 
     # unique stuff 
     helper_func(self, some_args) 

इससे समस्या हल हो जाती है।

लेकिन क्या मुझे यह करना चाहिए? क्या यह पाइथोनिक है?

+3

इसमें बिल्कुल कोई समस्या नहीं है। 'स्वयं' * बस * उदाहरण के संदर्भ में है, यह निजी नहीं है और न ही इसे अन्य कार्यों में पारित करना खतरनाक है। –

+3

आपको ऐसा करने की आवश्यकता क्यों है? 'बी' को 'ए' से' imp_func 'विरासत में मिला है, इसलिए आप बिना किसी समस्या के 'b.common_func' में' self.imp_func (* args) 'को कॉल कर सकते हैं। –

+0

@FlorianBrucker केवल एक समारोह नहीं है, लेकिन एक जोड़े जो माता-पिता वर्ग से बुलाया जाता है, और कुछ को कई कक्षाओं में कई कार्यों में दो बार कहा जाता है। यह बहुत फूला हुआ वर्ग और कार्यों की ओर जाता है। यह उन कार्यों को लिखने में भी समय लगता है। सहायक कक्षाओं का उपयोग समय, प्रयास को बचाएगा और कोड को साफ और अधिक बनाए रखने योग्य बनाएगा। – elssar

उत्तर

24

इसमें कोई समस्या नहीं है। self के उदाहरण हर समय कार्यों (और अन्य कक्षाओं के तरीकों) को पारित करते हैं।

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