अजगर में, फ़ंक्शन के साथ एक मॉड्यूल को परिभाषित करना बेहतर होता है या एक वर्ग के साथ एक मॉड्यूल होता है जिसमें फ़ंक्शन होते हैं? [बन्द है]


12

मेरे कोड में उपरोक्त दोनों विकल्पों में से एक समान रूप से अच्छी तरह से काम करेगा, लेकिन मैं दोनों दृष्टिकोणों के पेशेवरों और विपक्षों का पता लगाने में रुचि रखता हूं।

जवाबों:


9

यह ईमानदारी से आपकी आवश्यकताओं पर निर्भर करता है। अधिकांश समय कार्यों का एक मॉड्यूल वह होगा जो आप खोज रहे हैं।

पायथन क्लासेस (imho) को C # या C ++ या Java में कक्षाओं की तरह नहीं सोचा जाना चाहिए, एक बड़े माता-पिता में कार्यों के एक समूह को व्यवस्थित करने के लिए एक तार्किक कारण होना चाहिए, डेटा संरचनाएं इसका एक अच्छा उदाहरण होगी, जो आप चाहते हैं कार्यों का एक समुच्चय सेट जो सामान्य उद्देश्य वाले कार्यों के शिथिल एकत्र सेट के बजाय सीधे कक्षा पर लागू होता है।

  • कार्यों के मॉड्यूल: सामान्य उद्देश्य, उपयोगिता, और अधिक "वैश्विक" फ़ंक्शन
  • क्रियाओं के वर्ग के मॉड्यूल: समान जरूरतों, अलग-अलग लिंक्ड सूची डेटा प्रकारों या ऑडियो प्रोसेसिंग फ़ंक्शन या विभिन्न प्रकार के पेड़ों के समूह।

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


7
मैं पायथन वर्ग और अन्य भाषाओं के बीच के विपरीत को नहीं समझता। आप किस भाषा में उन कार्यों के साथ एक वर्ग रखेंगे जिनके पास समूह होने का कोई तार्किक कारण नहीं है?
गाइ सिरटन

7

मूल प्रश्न यह है कि क्या आपको अपने मॉड्यूल / वर्ग के विभिन्न उदाहरणों की आवश्यकता है । एक अजगर मॉड्यूल एक सिंगलटन की तरह है - आप हमेशा उसी का संदर्भ देते हैं वस्तु , अर्थात यदि आपको उदाहरणों की आवश्यकता है, तो आपको एक वर्ग की आवश्यकता है।

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


2
यह इंगित करने के लायक हो सकता है कि आप शायद किसी ऐसी चीज के बारे में बात कर रहे हैं जिसमें राज्य है, उदाहरण के लिए वैश्विक चर के साथ एक मॉड्यूल बनाम सदस्य चर के साथ एक वर्ग। यदि आपकी कक्षा में केवल विधियाँ हैं, लेकिन कोई राज्य नहीं है, तो कई उदाहरण हैं
thbusch

3
@thbusch, हाँ, यह ज़रूरत के मामलों में निहित है ।
kr1

जब आपने एक ऐसे उदाहरण की आवश्यकता के बारे में बात की, जिसने मुझे मॉड्यूल बनाम क्लास के बारे में समझा। जैसे अगर मुझे कई कार बनाने की आवश्यकता है तो एक वर्ग उपयुक्त होगा एक कैलकुलेटर मॉड्यूल बनाम जहां मुझे कैलकुलेटर का एक गुच्छा बनाने की आवश्यकता नहीं है मुझे उस मॉड्यूल से केवल ऐड और घटाना विधियों का उपयोग करने की आवश्यकता है।
ताज़ोबे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.