2010-08-25 19 views
9

में मॉड्यूल समारोह तो मैं एक मॉड्यूल कुछ स्थिर तरीकों है कि में एक वर्ग है। इन स्थिर तरीकों में से कुछ केवल सीआरसी चेक और सामान करते हैं, और वे कक्षा के बाहर वास्तव में उपयोगी नहीं हैं (मैं उन्हें जावा या सी ++ में निजी स्थैतिक तरीकों से बनाऊंगा)। मैं सोच रहा हूं कि मुझे उन्हें वैश्विक वर्ग के कार्यों (कक्षा के बाहर) बनाना चाहिए।स्टेटिक विधि बनाम अजगर

क्या इसे किसी भी तरह से करने का कोई फायदा है? कक्षा from module import class द्वारा आयात की जा रही है, इसलिए मैं उन मॉड्यूल को भी खींचने के बारे में चिंतित नहीं हूं। लेकिन क्या मुझे उन्हें कक्षा के तरीके बनाना चाहिए ताकि from module import * सुरक्षित या कुछ हो?

उत्तर

7

एक अंडरस्कोर के साथ फ़ंक्शन नामों को उपसर्ग करना यह कहने का एक सम्मेलन है कि वे निजी हैं, और यह उन्हें from module import * के साथ आयात करने से भी रोक देगा। (यदि आप एक __init__.py फ़ाइल की जरूरत नहीं है)

__all__ = ['my_class_name'] 

यह एक श्वेत सूची दृष्टिकोण के अधिक है यह सिर्फ मॉड्यूल में ही किया जा सकता है, -

एक और तकनीक मॉड्यूल में एक __all__ सूची निर्दिष्ट करने के लिए है इसलिए आप अग्रणी अंडरस्कोर का उपयोग किए बिना आयात किए जाने पर पूर्ण नियंत्रण प्राप्त कर सकते हैं।

तो जब तक अपने तरीके तार्किक वर्ग में हैं, और अपने वर्णन से वे नहीं है, मैं उन्हें मॉड्यूल स्तर कार्यों के रूप में छोड़ने के लिए और इन दो तरीकों में से एक का उपयोग उन्हें निजी बनाने के लिए होगा।

+0

मुझे '__all__' के बारे में पता नहीं था। धन्यवाद =] – Falmarri

3

उन्हें मॉड्यूल स्तर के कार्यों, और उन्हें एक ही अंडरस्कोर के साथ उपसर्ग ताकि उपभोक्ताओं को समझते हैं कि वे निजी इस्तेमाल के लिए कर रहे हैं।

3

अगर वे वर्ग के बाहर उपयोगी नहीं हैं, उन्हें मॉड्यूल तरीकों बनाने के लिए प्रेरणा क्या है? उन्हें स्थैतिक विधि के रूप में रखते हुए नाम अंतरिक्ष क्लीनर बनाता है।

शायद इसे बाहर ले जाने का एकमात्र लाभ हो ताकि लोग उन्हें योग्य श्रेणी का उपयोग किए बिना संदर्भित कर सकें। मान लें कि आपके पास एक लॉग विधि है जिसे स्थानों के एक टन में संदर्भ मिला है, यह स्टाइलिस्ट पसंद के रूप में समझ सकता है।

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