2012-05-04 13 views
5

मान लें कि मुझे अपनी कंपनी के लिए कई छोटे से मध्यम पुस्तकालयों को लिखना है।लेखन पायथन पुस्तकालय: संरचना, नामकरण और सर्वोत्तम प्रथाओं का आयात

mycompany.mylibrary1.moduleA 
mycompany.mylibrary1.moduleB.moduleD 
mycompany.mylibrary2.moduleC 

:

यह इस तरह निम्नलिखित संरचना को प्राप्त करने के रूप में मतलब है, एक pythonic रास्ते में, जावा दृष्टिकोण का उपयोग करने और एक आम उच्च स्तरीय पैकेज के साथ उन सभी को उपसर्ग (अहम, मॉड्यूल) या यह बेहतर बस के लिए जाने के लिए है:

mylibrary1.moduleA 
mylibrary1.moduleB.moduleD 
mylibrary2.moduleC 

मुझे लगता है कि समय के सबसे अधिक 2 दृष्टिकोण प्रयोग किया जाता है, लेकिन मैं (या नहीं) एक पुष्टिकरण लिए देख रहा था कि जाने के लिए रास्ता नहीं है।

मैं PEP 008 में इस संबंध में कुछ भी नहीं मिला, बगल में:

अजगर के पुस्तकालय का नामकरण सम्मेलनों एक मेस का एक सा है, इसलिए हम कभी नहीं मिलेगा यह पूरी तरह से संगत [...]

और फिर हम केवल मॉड्यूल और वर्ग नामकरण संकेत है, साथ ही इस तथ्य है कि रिश्तेदार आयात हतोत्साहित किया जाता है मिलता है।

तथ्य यह है कि पूर्ण आयात आपके पुस्तकालयों को वास्तव में महत्वपूर्ण तरीके से व्यवस्थित करने का निर्णय लेने का तरीका है (और मैं यहां चर्चा करने के लिए नहीं हूं कि रिश्तेदार आयात से परहेज करना अच्छा या बुरा है)।

मुझे जावा दृष्टिकोण पसंद है जो आपके सभी पुस्तकालयों को नामित करता है, लेकिन मुझे लगता है कि यह पाइथनिक नहीं है ... जाने का सुझाया गया तरीका क्या है?

पीएस। सामान्य रूप से 'सर्वोत्तम अभ्यास' प्रश्नों को एसओ पर व्यक्तिपरक माना जाता है, पायथन में पीईपी का अस्तित्व उन्हें मेरी राय में बहुत ही उद्देश्य देता है! हालांकि उत्तर हो सकता है ... आपके पुस्तकालयों को व्यवस्थित करने के लिए सबसे अच्छा अभ्यास नहीं है ..

+1

क्या आपने कभी पुस्तकालयों का उपयोग करने के लिए कंपनी के बाहर लोगों के लिए इरादा किया है? आप करते हैं, उन्हें 'mylibrary1' बनाना आसान है। अगर वे पूरी तरह से आंतरिक उपयोग के लिए हैं, तो' mycompany.mylibary1' का अर्थ है कि आप बाद में किसी और के 'mylibrary1' के साथ परेशानी में नहीं चल सकते हैं। –

उत्तर

5

पायथन आयात और नामों के साथ एक संज्ञानात्मक मुद्दा है। चूंकि पहले-ऑर्डर ऑब्जेक्ट्स (प्राइमेटिव्स, मॉड्यूल, क्लासेस, फंक्शंस, मॉड्यूल होने का नाटक करने वाले वर्ग, ऑब्जेक्ट्स होने का नाटक करने वाले मॉड्यूल, ईटी कैटर) हैं, इसलिए लोग यह इंगित करने के लिए डॉट-नोटेशन का उपयोग करते हैं कि एक इकाई के पास " एक बाहरी स्रोत से "पहुंचे। इस प्रकार

import foo.bar 
e = foo.bar.make_entity() 

स्पष्ट की तुलना में

from foo.bar import make_entity 
e = make_entity() 

होने लगा बहरहाल, यह मतलब है कि आप अक्सर पूरा पथ जो कुछ भी आप का उपयोग करने की जरूरत है लिखना होगा कि है। "com.example.some.lib.module.frobnicate() जल्दी से थकाऊ हो जाता है। इस प्रकार, एक विनम्र पुस्तकालय इसकी पहुंच के लिए एक उचित लघु नाम प्रदान करता है।

+0

धन्यवाद @ बिटरेंस। यह नहीं है बिल्कुल एक आधिकारिक सर्वोत्तम अभ्यास, लेकिन पूरे नामस्थान को यथासंभव छोटा रखने का एक अच्छा कारण है। – Stefano

+0

आप बिल्कुल सही हैं। मुझे यह स्पष्ट करना चाहिए था कि मैं मानदंड बनाने की कोशिश करने के बजाय मैंने जो देखा है उसका वर्णन कर रहा हूं। – Bittrance

संबंधित मुद्दे