मुझे पायथन स्रोत कोड कैसे व्यवस्थित करना चाहिए? [बन्द है]


99

मैं पायथन के साथ शुरू कर रहा हूं (यह उच्च समय है जब मैं इसे शॉट देता हूं), और मैं कुछ सर्वोत्तम प्रथाओं की तलाश कर रहा हूं।

मेरी पहली परियोजना एक कतार है जो कई सूत्र में कमांड-लाइन प्रयोग चलाती है। मैं एक बहुत लंबी main.pyफ़ाइल प्राप्त करना शुरू कर रहा हूं , और मैं इसे तोड़ना चाहूंगा। सामान्य तौर पर, मैं देख रहा हूँ: अजगर प्रोग्रामर कई स्रोत फ़ाइलों को कैसे व्यवस्थित करते हैं? क्या कोई विशेष संरचना है जो आपके लिए काम करती है?

मेरे विशिष्ट प्रश्नों में शामिल हैं:

  1. क्या प्रत्येक कक्षा एक अलग फाइल में होनी चाहिए?
  2. मुझे स्रोत कोड के सापेक्ष इकाई परीक्षण कैसे व्यवस्थित करने चाहिए?
  3. मुझे विशेष रूप से कमांड-लाइन ऑपरेशन के लिए डॉक्स टिप्पणियां कहां डालनी चाहिए?
  4. यदि मैं कई निर्देशिकाओं का उपयोग करता हूं, तो मैं उनके बीच कक्षाएं कैसे आयात करूं?

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


4
यह आपके कोड को व्यवस्थित करने के बारे में कुछ बातें समझाएगा docs.python.org/tutorial/modules.html
Nikola Smiljanić

2
यहाँ अजगर डॉक्स से कुछ अधिक उपयोगी जानकारी है। <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon

11
यह सवाल विशेष रूप से पायथन समुदाय में एक व्यापक रूप से स्वीकृत सम्मेलन की तलाश में है। उत्तर कोई राय का विषय नहीं है, हालाँकि अधिकांश उत्तरों की तरह यह समय के साथ बदल सकता है। मेरा सुझाव है कि इसे फिर से खोला जाए या बहुत कम से कम मूल उत्तर को हटा दिया जाए।
एंड्रेस जान टैक

जवाबों:


32

एरिक ने जिस लेख की ओर इशारा किया वह भयानक है क्योंकि इसमें बड़े पायथन कोड आधारों के आयोजन का विवरण है।

यदि आप Google से यहां आए हैं और यह पता लगाने की कोशिश कर रहे हैं कि एक बड़े स्रोत फ़ाइल को एकाधिक, अधिक प्रबंधनीय फ़ाइलों में कैसे विभाजित किया जाए, तो मैं इस प्रक्रिया को संक्षेप में बताऊंगा।

मान लें कि वर्तमान में आपके पास फ़ाइल में सब कुछ है main.py:

  • उसी फ़ोल्डर में एक और स्रोत फ़ाइल बनाएं ( utils.pyइस उदाहरण के लिए हमारा कॉल करें )
  • जो कुछ कक्षाएं, काम करता है, बयानों, आदि आप से की जरूरत है हटो main.pyमेंutils.py
  • में main.pyशीर्ष पर एक भी पंक्ति जोड़ें:import utils

वैचारिक रूप से यह जो करता है वह एक utilsअन्य स्रोत फ़ाइल में नामक एक नया मॉड्यूल बनाना है । इसके बाद जहां भी जरूरत हो आप इसे आयात कर सकते हैं।


क्या आपको एरिक द्वारा इंगित किया गया लेख याद है? मैं इस सवाल / जवाब पर एक एरिक को खोजने के लिए प्रतीत नहीं कर सकता
डैनियल Rucci

7
@DRR, हाँ, यह लेख है । किसी कारण से एक मध्यस्थ ने अपना उत्तर हटा दिया, इसके बावजूद 56 अपवोट्स थे।
ड्रू नूक्स

1
@DrewNoakes: मुझे लगता है कि लिंक-ओनली उत्तर होने के लिए इसे हटा दिया गया था; यदि केवल उन्होंने ही लेख के मुख्य बिंदुओं को संक्षेप में प्रस्तुत किया होता।
ज़ूल

1
दुर्भाग्य से लेख अब एक मरे हुए लिंक :-( है नवीनतम संग्रहीत संस्करण यहाँ है:। Web.archive.org/web/20190714164001/http://...
इगोर Brejc

7

जिस तरह से आपको अपना कोड और परीक्षण व्यवस्थित करना चाहिए, ठीक वैसा ही है जैसा आप किसी भी ओओ भाषा के लिए करते हैं।

मैं इसे करने के तरीके से उत्तर देता हूं। यह सही नहीं हो सकता है लेकिन मेरे लिए काम करता है

  1. निर्भर करता है कि आपकी कार्यक्षमता कैसे विभाजित है। मेरे मुख्य अजगर ऐप के लिए मेरे पास प्रवेश बिंदुओं के लिए कक्षाओं के साथ 1 फ़ाइल है और फिर कार्यक्षमता के विभिन्न बिट्स के पैकेज हैं
  2. मैं ग्रहण के लिए PyDev का उपयोग करता हूं और इसे जावा की तरह व्यवस्थित करता हूं।
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. हर चीज़ पर नज़र रखने के लिए हर जगह DocString का उपयोग करें
  2. यह सुनिश्चित करने के बाद कि संबंधित __init__.pyफाइलें फ़ोल्डर्स में हैं। इसका सिर्फ एक साधारण मामला हैfrom module import class

5
एक चेतावनी, हालांकि: जावा पैकेज, फाइलों और कक्षाओं के साथ एक तानाशाही संबंध रखता है। कभी-कभी मैं जिस तरह से अधिक स्रोत फ़ाइलों के साथ समाप्त होता हूं, मैं वास्तव में चाहता हूं। कुछ संगठनों के सम्मेलनों - जैसे - बचना (नेस्टेड) ​​आंतरिक कक्षाएं या "हेल्पर" कक्षाएं फ़ाइल में कम - संकलक की आवश्यकताओं से परे, इसे और भी बदतर बना देती हैं। इसे व्यवस्थित रखें, और एक पदानुक्रम उपयोगी है, लेकिन मेकअप से बचने की कोशिश करें।
रोबोप्रोग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.