मॉड्यूल के लिए पायथन नामकरण सम्मेलनों


102

मेरे पास एक मॉड्यूल है जिसका उद्देश्य "नीब" नामक एक वर्ग को परिभाषित करना है। (और कुछ संबंधित कक्षाएं भी।) मुझे मॉड्यूल को कैसे कॉल करना चाहिए? "निब"? "Nibmodule"? और कुछ?

जवाबों:


110

बस निब। कक्षा एनब का नाम, एक राजधानी एन के साथ। नामकरण सम्मेलनों और अन्य शैली सलाह पर अधिक के लिए, PEP 8 , पायथन शैली गाइड देखें।


2
क्या अधिकांश पायथन परियोजनाएं इस सम्मेलन का पालन करती हैं? क्योंकि मुझे लगता है कि अंतर्निहित कक्षाएं लोअरकेस में हैं, उदाहरण के लिए सूची, स्ट्रिंग, आदि
राम राचम

4
आप अवलोकन लिखते हैं कि बिल्ट-इन प्रकार सही हैं। ये निश्चित रूप से अपवाद हैं, हालांकि। अधिकांश अन्य मानक पुस्तकालय में परिभाषित कक्षाएं हैं पूंजीकृत।
Stephan202

2
मैंने सोचा कि यह सही सम्मेलन था, लेकिन इसके साथ एक अंतर्निहित समस्या है, कम से कम मुझे ऐसा लगता है। कहो कि मेरे पास एक कक्षा है Client, और समझ में आता है कि मैं अक्सर इसका उदाहरण देता हूं जिसे मैं कॉल करना चाहता हूं client। लेकिन आपके सम्मेलन के अनुसार, मॉड्यूल का नाम होगा client, और इसलिए मुझे हमेशा अपने उदाहरणों को कुछ अप्राकृतिक नाम देना होगा client_instance। आप इस समस्या के बारे में क्या सोचते हैं?
रे

3
@ रे लेकिन कहते हैं कि सम्मेलन में मॉड्यूल का नाम था Client, फिर यह वर्ग नाम के साथ टकराएगा Client। चूंकि केवल 3 संभावित नामकरण संस्करण हैं ( client, Clientया CLIENT) वहाँ हमेशा दो उदाहरणों, वर्गों, मॉड्यूल या स्थिरांक के बीच टकराव होगा। मेरा मानना ​​है कि कम बार आप अपने मॉड्यूल को एक उदाहरण के रूप में या कक्षा की तुलना में स्थिर नाम देते हैं, और इसलिए अन्य संभावनाओं का बेहतर नामकरण सम्मेलन है। यह मॉड्यूल से आयात करने को भी अधिक पठनीय बना देगा क्योंकि आप आमतौर पर चर के बजाय कक्षाओं और स्थिरांक का आयात करते हैं।
टेड क्लेन बर्गमैन 18

2
बिल्डरों के निचले हिस्से का कारण यह है कि उन्हें अजगर के बजाय सी में लागू किया गया है।
हर

41

मैं इसे nib.py कहूँगा। और मैं कक्षा का नाम निब भी रखूंगा।

एक बड़े अजगर प्रोजेक्ट में, जिस पर मैं काम कर रहा हूं, हमारे पास मूल रूप से एक महत्वपूर्ण वर्ग को परिभाषित करने वाले बहुत सारे मॉड्यूल हैं। कक्षाओं को एक बड़े अक्षर से शुरू किया जाता है। मॉड्यूल को लोअरकेस में वर्ग की तरह नाम दिया गया है। इससे आयात निम्नलिखित की तरह होता है:

from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs

यह जावा के तरीके का अनुकरण करने जैसा है। प्रति फ़ाइल एक वर्ग। लेकिन अतिरिक्त लचीलेपन के साथ, यदि आप समझ में आता है कि आप किसी अन्य वर्ग को एकल फ़ाइल में जोड़ सकते हैं।


27

मुझे पता है कि मेरा समाधान पाइथोनिक दृष्टिकोण से बहुत लोकप्रिय नहीं है, लेकिन मैं एक मॉड्यूल-> एक वर्ग के जावा दृष्टिकोण का उपयोग करना पसंद करता हूं, जिसका नाम वर्ग है। मुझे अजगर की शैली के पीछे का कारण समझ में आता है, लेकिन मुझे बहुत बड़ी फाइल रखने का शौक नहीं है, जिसमें बहुत सारी कक्षाएं हैं। मुझे तह करने के बावजूद ब्राउज़ करना मुश्किल लगता है।

एक अन्य कारण संस्करण नियंत्रण है: एक बड़ी फ़ाइल होने का मतलब है कि आपके कमिट उस फ़ाइल पर ध्यान केंद्रित करते हैं। इससे संभावित रूप से सुलझने के लिए अधिक मात्रा में संघर्ष हो सकता है। आप अतिरिक्त लॉग जानकारी को भी ढीला करते हैं जो आपकी प्रतिबद्ध विशिष्ट फ़ाइलों को संशोधित करती है (इसलिए विशिष्ट कक्षाएं शामिल हैं)। इसके बजाय आप मॉड्यूल फ़ाइल में एक संशोधन देखते हैं, केवल यह समझने के लिए कि क्या संशोधन किया गया है, टिप्पणी करें।

ऊपर जाकर, यदि आप अजगर दर्शन को पसंद करते हैं, तो अन्य पदों के सुझावों के लिए जाएं। यदि आप इसके बजाय जावा-जैसे दर्शन पसंद करते हैं, तो Nib.py युक्त वर्ग Nib बनाएँ।


1
उल्लिखित मुद्दे संपादक में सीमाओं के कारण होते हैं, और संस्करण नियंत्रण उपकरणों के उपयोग में, भाषा या प्रोग्रामिंग शैली द्वारा नहीं। फ़ाइल के प्रति एक वर्ग कोड संरचना के लिए हानिकारक है। spyderनेविगेशन की सहायता के लिए अपनी कक्षाओं का सारांश देखने के लिए या एक समान संपादक का उपयोग करें , और दोनों पर एक ही फ़ाइल के साथ दो पैन खोलें। इसके अलावा, कृपया PEP8 पढ़ें। अजगर पायथन और जावा के लिए जावा लिखने के लिए है, लेकिन पायथन जावा लिखने के लिए नहीं है
Ioannis Filippidis

5
@IoannisFilippidis: यदि मुझे कोड आकार में एक फ़ाइल में मॉड्यूल के लिए सभी कक्षाएं लगानी होती हैं, जिसे मैं सामान्य रूप से प्रबंधित करता हूं, तो मैं फ़ाइल खोलने में भी सक्षम नहीं होऊंगा, अन्य सहयोगियों के साथ टकराव आसमान छू जाएगा, और मेरे बॉस मेरे में थूक देंगे चेहरा (लाक्षणिक रूप से, यह ऐसा है) इसे प्रस्तावित करने के लिए। एकल फ़ाइल दृष्टिकोण स्केल नहीं करता है, PEP-8 या नहीं।
स्टेफानो बोरिनी

2
@StefanoBorini: PEP8 एकल फ़ाइल दृष्टिकोण के लिए कॉल नहीं करता है। प्रति मॉड्यूल एक वर्ग और एक फ़ाइल प्रति (कोड इकाई) एक बहुत व्यापक स्पेक्ट्रम के दो चरम हैं। यदि आप प्रति मॉड्यूल एक फ़ाइल के साथ असहनीय रूप से बड़े फ़ाइल आकार देख रहे हैं, तो आपको शायद मॉड्यूल में एक पैकेज को तोड़ने के लिए अपने दृष्टिकोण को संशोधित करने पर विचार करना चाहिए।
चिन्तलगिरी शशांक

22

नीब ठीक है। यदि संदेह है, तो पायथन शैली गाइड का संदर्भ लें।

से पीईपी 8 :

पैकेज और मॉड्यूल नाम मॉड्यूल में छोटे, सभी-लोअरकेस नाम होने चाहिए। यदि यह पठनीयता में सुधार करता है तो अंडरस्कोर मॉड्यूल के नाम में उपयोग किया जा सकता है। पायथन पैकेज में भी छोटे, सभी-लोअरकेस नाम होने चाहिए, हालांकि अंडरस्कोर का उपयोग हतोत्साहित किया जाता है।

चूँकि मॉड्यूल नामों को नाम दर्ज करने के लिए मैप किया जाता है, और कुछ फ़ाइल सिस्टम असंवेदनशील और लंबे नामों को काटते हैं, इसलिए यह महत्वपूर्ण है कि मॉड्यूल नामों को काफी कम चुना जाए - यह यूनिक्स पर कोई समस्या नहीं होगी, लेकिन यह एक हो सकता है समस्या जब कोड को पुराने मैक या विंडोज संस्करण या डॉस में ले जाया जाता है।

जब C या C ++ में लिखे गए एक्सटेंशन मॉड्यूल में एक साथ पायथन मॉड्यूल होता है जो उच्च स्तर (जैसे अधिक ऑब्जेक्ट ओरिएंटेड) इंटरफ़ेस प्रदान करता है, C / C ++ मॉड्यूल में एक प्रमुख अंडरस्कोर (जैसे _socket) होता है।


1
उम्म ... यह मुझे पेट में मारता है। मैं पूरी तरह से अलग (मोंटी पाइथन संदर्भ के लिए कुछ) पैकेज / मॉड्यूल में अंडरस्कोर उपसर्ग का उपयोग कर रहा हूं।
स्टेफानो बोरीनी

0

से पीईपी-8: पैकेज और मॉड्यूल नाम :

मॉड्यूल में छोटे, सभी-लोअरकेस नाम होने चाहिए। यदि यह पठनीयता में सुधार करता है तो अंडरस्कोर मॉड्यूल के नाम में उपयोग किया जा सकता है।

पायथन पैकेज में भी छोटे, सभी-लोअरकेस नाम होने चाहिए, हालांकि अंडरस्कोर का उपयोग हतोत्साहित किया जाता है।

जब C या C ++ में लिखे गए एक्सटेंशन मॉड्यूल में एक साथ पायथन मॉड्यूल होता है जो उच्च स्तर (जैसे अधिक ऑब्जेक्ट ओरिएंटेड) इंटरफ़ेस प्रदान करता है, C / C ++ मॉड्यूल में एक प्रमुख अंडरस्कोर (जैसे _socket) होता है।


-3

अजगर में फू मॉड्यूल जावा में एक फू कक्षा फ़ाइल के बराबर होगा

या

foobar अजगर में मॉड्यूल एक के बराबर होगा FooBar जावा में वर्ग फ़ाइल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.