2010-10-12 6 views
6

मैंने देखा है लोगों को उदाहरण के लिए एक मॉड्यूल पर विकल्प सेट करने के बंदर-पैच का उपयोग करें,:पायथन: जब आप इसे आयात करते हैं तो मॉड्यूल के लिए कॉन्फ़िगरेशन सेटिंग्स सेट करने का अनुशंसित तरीका क्या है?

आयात mymodule
mymodule.default_img = "/my/file.png"
mymodule .view_default_img()

और Django, उदाहरण के लिए, पूरे Django अनुप्रयोग के लिए settings.py है, और यह हमेशा मुझ पर थोड़ा गेट करता है।

मॉड्यूल पर कॉन्फ़िगरेशन सेटिंग्स प्रबंधित करने के अन्य तरीके क्या हैं? क्या सिफारिश की जाती है? ऐसा लगता है कि मॉड्यूल-स्तरीय कॉन्फ़िगरेशन सेटअप करने के लिए अक्सर कोई अच्छा तरीका नहीं है।

जाहिर है, कॉन्फ़िगरेशन से पूरी तरह से परहेज करना सबसे अधिक बेहतर है, और आमतौर पर कक्षाओं का उपयोग करना बेहतर होता है, या किसी फ़ंक्शन में तर्क में पास होता है। लेकिन कभी-कभी आप किसी प्रकार की सेटिंग्स से बचने से नहीं बच सकते हैं, और कभी-कभी यह वास्तव में सुविधा के लिए वैश्विक मॉड्यूल-व्यापी सेटिंग्स के लिए समझ में आता है (उदाहरण के लिए, Django के टेम्पलेट सिस्टम - प्रत्येक टेम्पलेट के लिए बेस पथ निर्दिष्ट करना होगा एक दुःस्वप्न, निश्चित रूप से अच्छा DRY कोड नहीं)।

उत्तर

3

एक विकल्प ConfigParser मॉड्यूल है। आपके पास गैर-पायथन कॉन्फ़िगरेशन फ़ाइल में सेटिंग्स हो सकती हैं और प्रत्येक मॉड्यूल में इसकी सेटिंग्स को पढ़ा जाता है। एक और विकल्प यह है कि प्रत्येक मॉड्यूल में कॉन्फ़िगरेशन विधि हो, जो क्लाइंट कोड भी इसके तर्कों को पार कर सके।

# foo.py 
setting1 = 0 
setting2 = 'foo' 

def configure(config1, config2): 
    global setting1, setting2 

    setting1 = config1 
    setting2 = config2 
का आयात मॉड्यूल में

फिर,

import foo 

foo.configure(42, 'bar') 

व्यक्तिगत रूप से, मुझे लगता है कि सबसे अच्छा तरीका यह है सेटिंग्स Django की तरह फाइल के साथ क्या करना है।

+0

व्यक्तिगत रूप से, मुझे लगता है कि करने का सबसे बुरा तरीका django जैसी सेटिंग्स फ़ाइल के साथ है। लेकिन ConfigParser का उल्लेख करने के लिए +1। –

+2

असल में, मैंने शायद मेरे प्रश्न को बहुत अच्छी तरह से नहीं बताया। जब मैंने कहा "मॉड्यूल के लिए कॉन्फ़िगरेशन सेटिंग्स" मेरा मतलब पाइथन के भीतर था। तो, शायद एक बेहतर सवाल: जब आप मॉड्यूल आयात करते हैं, तो पाइथन के भीतर रनटाइम पर मॉड्यूल-स्तरीय स्थिति/पैरामीटर सेट अप करने का सबसे अच्छा तरीका क्या है? उदाहरण के लिए, जब आप कक्षा को तुरंत चालू करते हैं, तो क्लास-स्तरीय स्थिति सेट करने के लिए एक सामान्य पायथनिक तरीका __init__ फ़ंक्शन के पैरामीटर के साथ होता है। मॉड्यूल के लिए __init__ फ़ंक्शन क्या है? – bryhoyt

+1

और, बिंदु पर अधिक (क्योंकि मॉड्यूल में सीधे रनटाइम कोड डालना आसान है, जैसे __init__ फ़ंक्शन), मैं मॉड्यूल "__init__" फ़ंक्शन के पैरामीटर कैसे पास करूं? – bryhoyt

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

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