मैं काफी अजगर करने के लिए नया हूँ और निम्नलिखित वर्ग से संबंधित प्रश्न है:सर्वश्रेष्ठ अभ्यास जब उदाहरण चर को परिभाषित करने
class Configuration:
def __init__(self):
parser = SafeConfigParser()
try:
if parser.read(CONFIG_FILE) is None:
raise IOError('Cannot open configuration file')
except IOError, error:
sys.exit(error)
else:
self.__parser = parser
self.fileName = CONFIG_FILE
def get_section(self):
p = self.__parser
result = []
for s in p.sections():
result.append('{0}'.format(s))
return result
def get_info(self, config_section):
p = self.__parser
self.section = config_section
self.url = p.get(config_section, 'url')
self.imgexpr = p.get(config_section, 'imgexpr')
self.imgattr1 = p.get(config_section, 'imgattr1')
self.imgattr2 = p.get(config_section, 'imgattr2')
self.destination = p.get(config_section, 'destination')
self.createzip = p.get(config_section, 'createzip')
self.pagesnumber = p.get(config_section, 'pagesnumber')
यह इस उदाहरण में, एक और समारोह में अधिक उदाहरण चर जोड़ने के लिए get_info
ठीक है, या क्या यह कन्स्ट्रक्टर में सभी इंस्टेंस चर को परिभाषित करने का सबसे अच्छा अभ्यास है? अगर मैं जगह पर नए इंस्टेंस वैरिएबल को परिभाषित करता हूं तो क्या यह स्पेगेटी कोड नहीं ले सकता?
संपादित करें: मैं इस कोड का उपयोग एक साधारण छवि स्क्रैपर के साथ कर रहा हूं। get_section
के माध्यम से मैं कॉन्फ़िगरेशन फ़ाइल में सभी अनुभागों को वापस कर देता हूं, और उसके बाद उन सभी साइट पर जाने के लिए पुन: प्रयास करता हूं जिनसे मैं छवियों को स्क्रैप कर रहा हूं। प्रत्येक पुनरावृत्ति के लिए मैं कॉन्फ़िगरेशन फ़ाइल में प्रत्येक अनुभाग के लिए कॉन्फ़िगरेशन सेटिंग्स प्राप्त करने के लिए get_section
पर कॉल करता हूं। यदि कोई अन्य दृष्टिकोण के साथ आ सकता है तो यह ठीक रहेगा! धन्यवाद!
http://stackoverflow.com/questions/2964230/python-how-should-i-make-instance-variables-available –
'स्व।__parser = कोई भी '' __init __() 'की शुरुआत में सेट नहीं होना चाहिए। इसका कारण यह है कि '__init __()' को पहले से मौजूद * ऑब्जेक्ट का पहला mentod कहा जाता है। यदि पार्सर कॉन्फ़िगरेशन फ़ाइल को पढ़ने में विफल रहता है और अपवाद उठाता है, तो अपवाद कहीं भी कैच हो सकता है (प्रोग्राम समाप्त नहीं किया जा सकता है)। फिर 'कॉन्फ़िगरेशन' वर्ग का ऑब्जेक्ट अभी भी मौजूद है और बाद में 'get_info() '* एट्रिब्यूट एरर का कारण बन जाएगा: कॉन्फ़िगरेशन इंस्टेंस में कोई विशेषता नहीं है' __parser '। – pepr
@pepr क्या आपको पढ़ना चाहिए कि मुझे '__init __। Py' की शुरुआत में' self.__ parser = none' 'जोड़ना चाहिए या क्या आप पार्सर प्रारंभिकरण को __init __। Py' से दूसरे फ़ंक्शन में ले जाने का सुझाव देते हैं? – happygoat