2012-03-13 16 views
19

मैं सोच रहा था कि मॉड्यूल ऑब्जेक्ट्स को कक्षा या ऑब्जेक्ट में पास करने के लिए import का उपयोग करने की आवश्यकता है, यह बुरा विचार नहीं हो सकता है, क्योंकि यह उन मॉड्यूल पर हार्ड निर्भरता से बचाता है।पाइथन - 'आयात' या पैरामीटर के रूप में मॉड्यूल पास?

मैं सोच रहा था कि क्या किसी को पाइथन जेन के बारे में अधिक जानकारी है, तो मैं यह समझाने में सक्षम हूं कि यह एक भयानक/भयानक विचार क्यों नहीं है?

+0

यह निर्भरता इंजेक्शन की तरह लगता है और वास्तव में एक अच्छा विचार भी है। हालांकि, एक या दो कार्यों/कक्षाओं की बजाय आपको कितनी बार एक संपूर्ण मॉड्यूल की आवश्यकता होती है? – delnan

उत्तर

23

आप किस बारे में बात कर रहे हैं उसे dependency injection कहा जाता है और इसे आपके कोड को टेस्ट करने योग्य बनाने के लिए एक अच्छा अभ्यास माना जाता है। मुझे नहीं लगता कि पाइथन के बारे में कुछ भी है जो इसे अनियंत्रित या खराब अभ्यास करेगा।

वहाँ आप में पारित झंडा किसी तरह के आधार पर अलग मॉड्यूल आयात करके अन्य तरीकों से आप अजगर में यह कर सकता है, उदाहरण के लिए कर रहे हैं: मॉड्यूल आप उपयोग करना है इच्छा को

class Foo(object): 
    def __init__(self, testing=False): 
     if testing: 
      import module_test as module 
     else: 
      import module 
     self.module = module 

लेकिन एक संदर्भ गुजर अधिक लचीला, चिंताओं को बेहतर तरीके से अलग करता है, और किसी वर्ग या उदाहरण (या स्ट्रिंग या पूर्णांक) के संदर्भ को पारित करने से कम पाइथोनिक नहीं है जिसे आप उपयोग करना चाहते हैं। प्रश्न में वर्ग कई अलग अलग मॉड्यूल से एक का उपयोग कर सकते हैं

class Foo(object): 
    def __init__(self, module=None): 
     if not module: 
      import module 
     self.module = module 
+0

मुझे लगता है कि यह एक आंत महसूस कर रहा था कि आयात को हटाने से थोड़ा 'गलत' – Magnus

3

, तो यह समझ बनाने के पारित करने के लिए कर सकते हैं:

साधारण (गैर परीक्षण) उपयोग के मामले के लिए, आप एक डिफ़ॉल्ट तर्क मान का उपयोग कर सकते हैं जिस में आप इसका उपयोग करना चाहते हैं।

हर स्थिति में मुझे अब तक सामना करना पड़ा है, हालांकि, आवश्यक मॉड्यूल निश्चित हैं, इसलिए import का उपयोग करना पसंद किया जाएगा।

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