मैं जावा मॉडल के लिए उपयोग किया जाता हूं, जहां आपके पास प्रति फ़ाइल एक सार्वजनिक वर्ग हो सकता है। पायथन में यह प्रतिबंध नहीं है, और मैं सोच रहा हूं कि कक्षाएं आयोजित करने के लिए सबसे अच्छा अभ्यास क्या है।
मैं जावा मॉडल के लिए उपयोग किया जाता हूं, जहां आपके पास प्रति फ़ाइल एक सार्वजनिक वर्ग हो सकता है। पायथन में यह प्रतिबंध नहीं है, और मैं सोच रहा हूं कि कक्षाएं आयोजित करने के लिए सबसे अच्छा अभ्यास क्या है।
जवाबों:
पायथन फ़ाइल को "मॉड्यूल" कहा जाता है और यह आपके सॉफ़्टवेयर को व्यवस्थित करने का एक तरीका है ताकि यह "समझ में" आए। एक और एक निर्देशिका है, जिसे "पैकेज" कहा जाता है।
एक मॉड्यूल एक अलग चीज है जिसमें एक या दो दर्जन बारीकी से संबंधित कक्षाएं हो सकती हैं। चाल यह है कि एक मॉड्यूल कुछ ऐसा है जिसे आप आयात करेंगे, और आपको उस सॉफ़्टवेयर को पूरी तरह से समझदार बनाने की आवश्यकता है जो आपके सॉफ़्टवेयर को पढ़ेगा, बनाए रखेगा और विस्तारित करेगा।
नियम यह है: एक मॉड्यूल पुन: उपयोग की इकाई है ।
आप आसानी से एकल वर्ग का पुन: उपयोग नहीं कर सकते। आपको किसी भी कठिनाई के बिना एक मॉड्यूल का पुन: उपयोग करने में सक्षम होना चाहिए। आपके पुस्तकालय में सब कुछ (और आप जो कुछ भी डाउनलोड करते हैं और जोड़ते हैं) या तो एक मॉड्यूल या मॉड्यूल का एक पैकेज है।
उदाहरण के लिए, आप कुछ ऐसी चीजों पर काम कर रहे हैं जो स्प्रेडशीट पढ़ती है, कुछ गणना करती है और परिणामों को डेटाबेस में लोड करती है। आप अपने मुख्य कार्यक्रम को किस तरह देखना चाहते हैं?
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
बयानों के साथ चित्रित कर रहे हैं ।
चूंकि कोई कृत्रिम सीमा नहीं है, यह वास्तव में इस बात पर निर्भर करता है कि क्या समझ में आता है। यदि आपके पास काफी कम, सरल कक्षाएं हैं जो तार्किक रूप से एक साथ समूहीकृत हैं, तो उन्हें एक गुच्छा में टॉस करें। यदि आपके पास बड़ी, जटिल कक्षाएं या कक्षाएं हैं जो समूह के रूप में समझ में नहीं आती हैं, तो प्रति कक्षा एक फ़ाइल जाएं। या बीच में कोई चीज उठाओ। चीजें बदलते ही रिफलेक्टर।
मैं निम्नलिखित कारण के लिए जावा मॉडल को पसंद करता हूं। एक अलग फ़ाइल में प्रत्येक वर्ग रखने से स्रोत कोड ब्राउज़ करते समय कक्षाओं को आसान बनाने के लिए पुन: उपयोग को बढ़ावा देता है। यदि आपके पास एक एकल फ़ाइल में वर्गीकृत कक्षाओं का एक समूह है, तो यह अन्य डेवलपर्स के लिए स्पष्ट नहीं हो सकता है कि वहां ऐसी कक्षाएं हैं जिन्हें परियोजना की निर्देशिका संरचना को ब्राउज़ करके बस पुन: उपयोग किया जा सकता है । इस प्रकार, अगर आपको लगता है कि आपकी कक्षा का पुन: उपयोग किया जा सकता है, तो मैं इसे अपनी फ़ाइल में रखूंगा।
यह पूरी तरह से इस बात पर निर्भर करता है कि परियोजना कितनी बड़ी है, कक्षाएं कितनी लंबी हैं, यदि उनका उपयोग अन्य फ़ाइलों और इसी तरह किया जाएगा।
उदाहरण के लिए, मैं अक्सर डेटा-एब्सट्रैक्शन के लिए कक्षाओं की एक श्रृंखला का उपयोग करता हूं - इसलिए मेरे पास 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
- यदि आप चीजों को समझ से बाहर कर रहे हैं, और फाइलें दसियों हजार लाइनों की लंबी नहीं हैं, तो आपने इसे सही तरीके से व्यवस्थित किया है।
अजगर मॉड्यूल प्रलेखन संकुल के आयोजन पर कुछ उपयोगी जानकारी है।
जब मैं फाइलों की कड़वाहट से परेशान हो जाता हूं और जब संबंधितता की वांछनीय संरचना स्वाभाविक रूप से उभरने लगती है तो मैं अपने आप को चीजों को विभाजित करता हुआ पाता हूं। अक्सर इन दो चरणों का मेल प्रतीत होता है।
यदि आप चीजों को बहुत जल्दी विभाजित करते हैं तो यह बहुत कष्टप्रद हो सकता है, क्योंकि आप महसूस करना शुरू करते हैं कि संरचना की पूरी तरह से अलग क्रमबद्धता की आवश्यकता है।
दूसरी ओर, जब कोई भी .java या .py फाइल लगभग 700 से अधिक लाइनों में हो रही होती है, तो मुझे यह याद करने की लगातार कोशिश करने पर गुस्सा आने लगता है कि "वह विशेष बिट" कहां है।
पायथन / जाइथन के साथ आयात विवरणों की परिपत्र निर्भरता भी एक भूमिका निभाती प्रतीत होती है: यदि आप बहुत से सहयोगी बुनियादी बिल्डिंग ब्लॉकों को अलग-अलग फाइलों में विभाजित करने का प्रयास करते हैं, तो भाषा का यह "प्रतिबंध" / "अपूर्णता" आपको चीजों को समूह बनाने के लिए मजबूर करता है, शायद बल्कि एक समझदार तरीके से।
पैकेजों में विभाजित करने के रूप में, मुझे वास्तव में नहीं पता है, लेकिन मैं कहूंगा कि शायद एक ही नियम नाराजगी और खुश संरचना के उद्भव के सभी स्तरों पर काम करता है।