2010-08-26 6 views
18

में नामस्थान के रूप में कक्षा का उपयोग करना अच्छा विचार है, मैं कक्षा में संबंधित सामान का एक गुच्छा डाल रहा हूं। मुख्य उद्देश्य उन्हें नामस्थान में व्यवस्थित करना है।क्या पाइथन

class Direction: 

    north = 0 
    east = 1 
    south = 2 
    west = 3 

    @staticmethod 
    def turn_right(d): 
    return turn_to_the_right 

    @staticmethod 
    def turn_left(d): 
    return turn_to_the_left 



# defined a short alias because direction will be used a lot 
D = Direction 

d0 = D.north 
d1 = D.turn_right(d) 

इसमें बहुत अधिक वस्तु अवधारणा शामिल नहीं है। सी ++ में, मैं वास्तविक भाषा कीवर्ड namespace का उपयोग करूँगा। पायथन में ऐसी कोई बात नहीं है। तो मैं इस उद्देश्य के लिए class का उपयोग करने की कोशिश कर रहा हूं।

क्या यह एक अच्छा विचार है? इस दृष्टिकोण के साथ कोई पतन?

मैंने कल एक संबंधित प्रश्न का उत्तर दिया है। यह सवाल एक अलग तरीके से पूछा जाता है। यह एक वास्तविक निर्णय है जिसे मुझे अपने लिए बनाना है।

स्टेटिक विधि बनाम अजगर में मॉड्यूल समारोह - स्टैक ओवरफ़्लो

Static method vs module function in python

+0

धन्यवाद। अब तक मुझे मिली टिप्पणी 1. मॉड्यूल का उपयोग करें 2. क्या समझ में आता है। जो भी मैं अभी भी समझना चाहता हूं वह यह है कि यदि कक्षा को केवल नामस्थान के रूप में उपयोग करने के लिए वैध विकल्प माना जाता है या यदि कोई अच्छा कारण नहीं है। –

उत्तर

14

सं स्टिक यह बजाय एक मॉड्यूल में।

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

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

+2

क्या मॉड्यूल के लिए मजबूत औचित्य है? मैं दिशा आयात * से 'करने के विकल्प के बारे में सोच सकता हूं। दूसरी तरफ, अगर केवल 4 स्थिरांक "उत्तर, पूर्व, दक्षिण, पश्चिम" हैं, तो ऐसा लगता है कि उन्हें अपने मॉड्यूल में रखा जा सकता है। –

+1

आपको संगठनात्मक दृष्टिकोण से, उन्हें कहां समझना चाहिए, उन्हें रखना चाहिए। यदि वे मौजूदा मॉड्यूल के साथ "एक साथ जाते हैं", तो उन्हें वहां रखें (आप उन्हें 'DIRECTION_NORTH' या जो भी हो) का नाम बदल सकते हैं। यदि नहीं, तो उन्हें एक अलग मॉड्यूल में डाल दें, अगर यह समझ में आता है। – mipadi

+0

नेमस्पेसिंग के लिए मॉड्यूल के बजाय कक्षा का उपयोग करने के लिए आपका तर्क उन वास्तविक गुणों से इनकार करता है जो दोनों चीजें पायथन में साझा होती हैं। अलग से अलग। – uchuugaka

2

हाँ, यह ठीक है। विधियों की तरह दिखने के लिए आप property का भी उपयोग कर सकते हैं।

आप एक बड़े वर्ग है, तो यह एक मॉड्यूल

2

यह स्थिति पर निर्भर करता उपयोग करने के लिए neater हो सकता है; यदि आप मॉड्यूल में निरंतर चिपक सकते हैं और इसे समझ में रखते हैं, तो हर तरह से ऐसा करते हैं, लेकिन उन्हें कक्षा में डालने से उनका अर्थ अधिक स्पष्ट हो सकता है, और समान स्थिरांक को अधिक "अमूर्तता" की अनुमति मिलती है: उन्हें ServerError में रखना कक्षा मॉड्यूल में स्वतंत्र रूप से रहने वाले SERVER_ERROR के साथ सभी को प्रीपेड करने से अधिक समझ में आता है।

सबसे सहज ज्ञान युक्त करें, लेकिन नेमस्पेस प्रदूषण से बचने का प्रयास करें।

4

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

नामस्थान के रूप में उपयोग की जाने वाली एक पायथन कक्षा एक पाइथन कक्षा से कम नहीं है जो किसी अन्य भाषा में कक्षा के बारे में धारणा को पूरा करती है। पाइथन को कक्षा होने के लिए तत्काल होने की आवश्यकता नहीं होती है। इसे इवर की आवश्यकता नहीं है और इसके लिए तरीकों की आवश्यकता नहीं है। यह काफी लचीला है।

क्लासेस में अन्य कक्षाएं भी हो सकती हैं।

बहुत से लोगों के पास उनके विचार हैं कि पाइथोनिक क्या है या नहीं। लेकिन अगर वे सभी स्थिरता जैसी किसी चीज़ के बारे में चिंतित थे, तो वे len()dir() और help() जैसी चीजों को वैश्विक कार्य के बजाय वस्तुओं की एक विधि बनने के लिए प्रेरित करेंगे।

क्या काम करता है, टिप्पणी करें/दस्तावेज करें यदि यह सामान्य या स्पष्ट उपयोग नहीं है।