2015-06-02 7 views
5

पायथन में, मेरे पास एक कक्षा है जिसे मैंने बनाया है।कक्षा में समर्थन कार्यों को रखने के लिए सबसे अच्छी जगह कहां है?

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

इसके लिए सामान्य डिजाइन प्रतिमान क्या है? क्या यह सामान्य क्लास के साथ myClassName.py के साथ-साथ एक ही फ़ाइल में कक्षा के बाहर सभी समर्थन कार्यों के लिए विशिष्ट है? या क्या मॉड्यूलरिटी के खर्च पर वर्ग के भीतर एम्बेडेड समर्थन फ़ंक्शन होना बेहतर है?

+1

इसे स्थिर बनाएं? '@ staticmethod' मेरा मानना ​​है ... और यदि आप संबंधित चीजें चाहते हैं, तो उन्हें एक ही फाइल में रखें। – Zizouz212

+0

इसके अलावा, क्या आपके पास मुख्य वर्ग के साथ myClassName.py के साथ-साथ एक ही फ़ाइल में कक्षा के बाहर सभी समर्थन कार्यों के समान है? या क्या मॉड्यूलरिटी के खर्च पर वर्ग के भीतर एम्बेडेड सपोर्ट फ़ंक्शन होना बेहतर है? ' – Zizouz212

उत्तर

0

तुम इतनी तरह एक staticmethod बना सकते हैं,: फिर

class yo: 
    @staticmethod 
    def say_hi(): 
     print "Hi there!" 

, तो आप ऐसा कर सकते हैं:

>>> yo.say_hi() 
Hi there! 
>>> a = yo() 
>>> a.say_hi() 
Hi there! 

वे गैर स्थिर, और स्थिर किया जा सकता है (कि अगर समझ में आता है) ।

बारे में जहाँ आपके कार्यों डाल करने के लिए ...

एक विधि एक वर्ग के लिए आवश्यक है, और यह उचित है विधि डेटा उस वर्ग के लिए विशिष्ट है प्रदर्शन करने के लिए है, तो यह एक विधि बना दें। यह तुम क्या चाहते हैं:

class yo: 
    self.message = "Hello there!" 
    def say_message(self): 
     print self.message 

मेरे say_message डेटा है कि एक वर्ग के उदाहरण के लिए विशेष रूप से है पर निर्भर करता है।

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

a = my_new_generator() 
next(a) 

उपयोग जो भी अधिक उपयुक्त है, और स्पष्ट रूप से:

a = my_new_generator() 
a.next() 

के रूप में भी किया जा सकता है। :)

+0

@staticmethod लागू करते समय, फ़ंक्शन का उपयोग कैसे किया जाता है? क्या इसका इस्तेमाल कक्षा के भीतर ही किया जा सकता है? बाहर? – MyNameIsKhan

+0

यहां, मैं स्पष्टीकरण के लिए एक संपादन करूँगा :) – Zizouz212

0

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

एक साइड नोट के रूप में: "myClassName.py" निश्चित रूप से अवांछित है। सबसे पहले क्योंकि मॉड्यूल नाम all_lower होना चाहिए, क्योंकि एक-मॉड्यूल-प्रति-वर्ग सामग्री पायथन में एक बकवास है - हम समूह से संबंधित वर्गों और कार्यों (और अपवाद और क्या नहीं) समूह को एक साथ जोड़ते हैं।

+0

my_class_name.py, जिसमें क्लास MyClassName है? – MyNameIsKhan

+0

आपके मॉड्यूल में क्या निर्भर करता है, वास्तव में - बिंदु यह है कि: प्रति कक्षा में एक मॉड्यूल नहीं होना चाहिए (न ही केवल कक्षाएं FWIW है, फ़ंक्शंस प्रथम श्रेणी हैं - कोई भी इरादा नहीं है - नागरिक)। –

0

यदि आप जिस खोज विधि के बारे में बात कर रहे हैं वह वास्तव में इतना विशिष्ट है और आपको इसे कहीं और फिर से उपयोग करने की आवश्यकता नहीं होगी, मुझे इसे स्थिर बनाने का कोई कारण नहीं दिख रहा है। तथ्य यह है कि इसे आवृत्ति चर तक पहुंच की आवश्यकता नहीं है, यह परिभाषा द्वारा स्थिर नहीं है।

यदि कोई संभावना है, तो इस विधि का पुन: उपयोग किया जा रहा है, इसे एक सहायक/उपयोगिता वर्ग (फिर से स्थिर नहीं) में दोबारा दोहराएं।

जोड़ा: बस को जोड़ने के लिए, जब आप स्थिर या नहीं किया जा रहा कुछ पर विचार करें, कैसे विधि नाम वर्ग के नाम से संबंधित है के बारे में लगता है कि चाहता था। कक्षा संदर्भ या ऑब्जेक्ट संदर्भ में उपयोग किए जाने पर यह विधि नाम अधिक समझ में आता है?

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

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