मुझे जावा मॉडल में उपयोग किया जाता है जहां आपके पास प्रति फ़ाइल एक सार्वजनिक कक्षा हो सकती है। पायथन में यह प्रतिबंध नहीं है, और मैं सोच रहा हूं कि कक्षाओं के आयोजन के लिए सबसे अच्छा अभ्यास क्या है।मुझे एक फाइल में कितनी कक्षाएं रखनी चाहिए?
उत्तर
एक पायथन फ़ाइल को "मॉड्यूल" कहा जाता है और यह आपके सॉफ़्टवेयर को व्यवस्थित करने का एक तरीका है ताकि यह "समझ" बन सके। एक और निर्देशिका है, जिसे "पैकेज" कहा जाता है।
एक मॉड्यूल एक अलग बात है जिसमें एक या दो दर्जन निकट से संबंधित वर्ग हो सकते हैं। चाल यह है कि एक मॉड्यूल ऐसा कुछ है जिसे आप आयात करेंगे, और आपको उस आयात को उन लोगों के लिए पूरी तरह से समझदार होने की आवश्यकता है जो आपके सॉफ़्टवेयर को पढ़, रखरखाव और विस्तारित करेंगे।
नियम यह है: एक मॉड्यूल पुन: उपयोग का यूनिट है।
आप आसानी से एक कक्षा का पुन: उपयोग नहीं कर सकते हैं। आप बिना किसी कठिनाई के मॉड्यूल का पुन: उपयोग करने में सक्षम होना चाहिए। आपकी लाइब्रेरी में सब कुछ (और जो भी आप डाउनलोड करते हैं और जोड़ते हैं) या तो मॉड्यूल या मॉड्यूल का पैकेज है।
उदाहरण के लिए, आप स्प्रेडशीट को पढ़ने वाले कुछ पर काम कर रहे हैं, कुछ गणना करता है और परिणामों को डेटाबेस में लोड करता है। आप अपने मुख्य कार्यक्रम की तरह दिखना चाहते हैं?
from ssReader import Reader
from theCalcs import ACalc, AnotherCalc
from theDB import Loader
def main(sourceFileName):
rdr= Reader(sourceFileName)
c1= ACalc(options)
c2= AnotherCalc(options)
ldr= Loader(parameters)
for myObj in rdr.readAll():
c1.thisOp(myObj)
c2.thatOp(myObj)
ldr.laod(myObj)
अवधारणाओं या हिस्सों में अपना कोड व्यवस्थित करने के तरीके के रूप में आयात के बारे में सोचें। वास्तव में प्रत्येक आयात में कितनी कक्षाएं कोई फर्क नहीं पड़ती हैं। क्या मायने रखता है वह समग्र संगठन है जिसे आप अपने import
कथनों के साथ चित्रित कर रहे हैं।
हाहा, मुझे कोटेशन में "भावना" पसंद है। – cdleary
@cdleary: एक व्यक्ति की भावना किसी अन्य व्यक्ति की पागलपन है। आमतौर पर, आप समझदार मॉड्यूल को परिभाषित कर सकते हैं। एक बड़े आवेदन में, हालांकि, हमेशा विश्लेषण के कई आयाम होते हैं और एक व्यक्ति किसी अन्य व्यक्ति के टुकड़े और कार्यक्षमता के आधार पर बाल विभाजित करेगा। –
उपरोक्त सिफारिशें http://docs.python-guide.org/en/latest/writing/structure/ –
मैं कहूंगा कि उस फ़ाइल में बहुत से वर्गों को तर्कसंगत रूप से समूहीकृत किया जा सकता है, बिना इसे बहुत बड़ा और जटिल बना दिया जा सकता है।
चूंकि कोई कृत्रिम सीमा नहीं है, यह वास्तव में समझ में आता है कि क्या समझ में आता है। यदि आपके पास काफी कम, सरल वर्गों का समूह है जो तर्कसंगत रूप से समूहबद्ध हैं, तो 'em' के समूह में टॉस करें। यदि आपके पास बड़ी, जटिल कक्षाएं या कक्षाएं हैं जो समूह के रूप में समझ में नहीं आती हैं, तो प्रति कक्षा एक फ़ाइल पर जाएं। या बीच में कुछ चुनें। चीजों में बदलाव के रूप में रिफैक्टर।
यह पूरी तरह से इस बात पर निर्भर करता है कि परियोजना कितनी बड़ी है, कक्षाएं कितनी देर तक हैं, अगर उन्हें अन्य फाइलों से उपयोग किया जाएगा और इसी तरह।
उदाहरण के लिए मैं अक्सर डेटा-एस्ट्रस्ट्रक्शन के लिए कक्षाओं की एक श्रृंखला का उपयोग करता हूं - इसलिए मेरे पास 4 या 5 कक्षाएं हो सकती हैं जो केवल 1 लाइन लंबी हो सकती हैं (class SomeData: pass
)।
यह अलग फ़ाइलों में इनमें से प्रत्येक विभाजित करने के लिए बेवकूफ हो सकता है - लेकिन जब से वे अलग अलग फ़ाइलों से इस्तेमाल किया जा सकता है, एक अलग data_model.py
फ़ाइल में इन सभी डाल मतलब होता है, तो मैं from mypackage.data_model import SomeData, SomeSubData
कर सकते हैं यदि आप इसमें बहुत सारे कोड वाले वर्ग हैं, शायद कुछ फ़ंक्शंस केवल इसका उपयोग करते हैं, इस वर्ग और सहायक कार्यों को एक अलग फ़ाइल में विभाजित करना एक अच्छा विचार होगा।
आपको उन्हें ढांचा बनाना चाहिए ताकि आप from mypackage.database.schema import MyModel
न करें, from mypackage.email.errors import MyDatabaseModel
- यदि आप कहां से चीजों को आयात कर रहे हैं, और फाइलें हजारों लाइनों तक लंबी नहीं हैं, तो आपने इसे सही तरीके से व्यवस्थित किया है।
Python Modules documentation पैकेजों को व्यवस्थित करने पर कुछ उपयोगी जानकारी है।
पाइथन मॉड्यूल दस्तावेज़ों के टूटी हुई लिंक के साथ अनुबंध में हैं। शायद [धारा 6.4 मॉड्यूल। पैकेज] (http://docs.python.org/2/tutorial/modules.html#packages) अब इच्छित लिंक है? – cod3monk3y
मुझे निम्नलिखित कारणों से जावा मॉडल पसंद है।प्रत्येक वर्ग को एक व्यक्तिगत फ़ाइल में रखना स्रोत कोड ब्राउज़ करते समय कक्षाओं को देखने में आसान बनाकर पुन: उपयोग को बढ़ावा देता है। यदि आपके पास एक फ़ाइल में समूहित वर्गों का समूह है, तो यह अन्य डेवलपर्स के लिए स्पष्ट नहीं हो सकता है कि वहां कक्षाएं हैं जिन्हें परियोजना के निर्देशिका संरचना ब्राउज़ करके बस पुन: उपयोग किया जा सकता है। इस प्रकार, यदि आपको लगता है कि आपकी कक्षा का पुन: उपयोग किया जा सकता है, तो मैं इसे अपनी फाइल में रखूंगा।
जब मैं फाइलों के संकेत से नाराज हो जाता हूं और जब स्वाभाविकता की वांछित संरचना स्वाभाविक रूप से उभरती है तो मुझे खुद को विभाजित चीजें मिलती हैं। अक्सर ये दो चरण मेल खाते हैं।
यदि आप चीजों को बहुत जल्दी विभाजित करते हैं तो यह बहुत परेशान हो सकता है, क्योंकि आपको यह महसूस करना शुरू हो जाता है कि संरचना का एक बिल्कुल अलग क्रम आवश्यक है।
दूसरी ओर, जब कोई .java या .py फ़ाइल लगभग 700 लाइनों से अधिक हो रही है, तो मुझे यह याद रखने की कोशिश की जाती है कि "वह विशेष बिट" कहां है।
आयात विवरणों के पाइथन/ज्योथन परिपत्र निर्भरता के साथ भी एक भूमिका निभाती है: यदि आप अलग-अलग फाइलों में बहुत अधिक सहयोगी मूल बिल्डिंग ब्लॉक को विभाजित करने का प्रयास करते हैं तो भाषा की यह "प्रतिबंध"/"अपूर्णता" आपको मजबूर करती है समूह चीजें, शायद एक समझदार तरीके से।
पैकेजों में विभाजित होने के नाते, मुझे वास्तव में पता नहीं है, लेकिन मैं शायद सामान्यता के सभी स्तरों पर परेशानी का एक ही नियम और खुश संरचना के उद्भव का कहना चाहूंगा।
- 1. मुझे डीडीडी में एक अनूठी जांच कहां रखनी चाहिए?
- 2. मैवेन प्रोजेक्ट के लिए मुझे एप्लिकेशन कॉन्फ़िगरेशन फाइल कहां रखनी चाहिए?
- 3. मुझे एंटिटी मैनेजर कितनी बार बनाना चाहिए?
- 4. मुझे कितनी दूरदर्शी पारदर्शिता लेनी चाहिए?
- 5. क्या मुझे एक अलग फाइल में सार्वजनिक इंटरफेस डालना चाहिए?
- 6. क्या मुझे एक फाइल खोलनी चाहिए या क्या मुझे अक्सर खोलना और बंद करना चाहिए?
- 7. मुझे डीएलएल फ़ाइल कहां रखनी चाहिए (जिसे मैं अपने प्रोजेक्ट में उपयोग करता हूं)
- 8. क्या एक ही फाइल में एकाधिक कक्षाएं अनुशंसित हैं?
- 9. क्या मुझे अपलोड (आईएमजी फाइल) को App_Data में सहेजना चाहिए?
- 10. गिट बनाम एसवीएन के लिए मुझे कितनी जगह चाहिए?
- 11. यूनिट परीक्षण के साथ मुझे कितनी दूर जाना चाहिए?
- 12. मुझे कोर डेटा को कितनी बार सहेजना चाहिए?
- 13. मुझे कौन सी परत चाहिए .edmx और उत्पन्न पॉको कक्षाएं?
- 14. मुझे डेटाबेस कनेक्शन को कितनी बार बंद करना चाहिए?
- 15. वेब ऐप विकसित करते समय मुझे बाहरी जेएआर फाइलें कहां रखनी चाहिए?
- 16. समझने में सहायता चाहिए कैसे luabind कक्षाएं
- 17. क्या मुझे मोंगोडीबी में या स्थानीय फाइल सिस्टम (नोड.जेएस द्वारा) में एक छवि स्टोर करनी चाहिए
- 18. क्या यह एक ही फाइल में एकाधिक कक्षाएं रखने का एक बुरा अभ्यास है?
- 19. एक फ़ाइल में दो सार्वजनिक कक्षाएं जावा
- 20. पाइथन कितनी बार फाइल में फ्लश करता है?
- 21. मुझे एक एपीआई चाहिए। मुझे कहां से शुरू करना चाहिए?
- 22. मुझे क्या रिशेर्पर फाइलें रखना चाहिए और स्रोत नियंत्रण में मुझे किन फ़ाइलों को अनदेखा करना चाहिए?
- 23. क्या मुझे अपने सभी जावास्क्रिप्ट स्रोतों को एक ही फाइल में कॉपी करना चाहिए?
- 24. क्या मुझे अभी भी एक फाइल में सभी सीएसएस रखने को परेशान करना चाहिए?
- 25. क्या अपवाद केस कक्षाएं होनी चाहिए?
- 26. मुझे सी ++ एप्लिकेशन में कितनी बार srand() को कॉल करना चाहिए?
- 27. सी # में कोशिश करने और पकड़ने के लिए मुझे कितनी बार उपयोग करना चाहिए?
- 28. वीएस -2008 में jquery के लिए मुझे कितनी इंटेलिजेंस की उम्मीद करनी चाहिए?
- 29. ओरेकल डेटाबेस आंकड़े कितनी बार चलाना चाहिए?
- 30. सेवा परत कक्षाएं सिंगलेट्स होनी चाहिए?
मुझे लगता है कि यह एक उचित * प्रश्न * है जो अन्य भाषाओं की आवश्यकताओं और सम्मेलनों को दिया गया है, और * उत्तर * "<पाइथन मॉड्यूल और संकुल को परिभाषित करता है> और इससे परे यह वरीयता (/ राय) का विषय है" - * वह उत्तर * खुद की राय नहीं है – d3vid