2012-04-23 4 views
30

मैं पाइथन कक्षा में विधियों को ऑर्डर करना चाहता हूं लेकिन मुझे नहीं पता कि सही क्रम क्या है।पायथन कक्षा में विधियों को ऑर्डर करने का एक अच्छा तरीका क्या है?

जब मैं पाइडेव के साथ एक्लिप्स में विधियों को निकालता हूं, ग्रहण संशोधित विधि के ऊपर निकाली गई विधि डालता है। लेकिन यह उच्च स्तर के विवरण से पहले निचले स्तर के विवरण रखता है। अंकल बॉब के मुताबिक मुझे विपरीत करना चाहिए ताकि मेरा कोड अखबार की सुर्खियों की तरह पढ़ सके। जब मैं जावा प्रोग्राम करता हूं तो मैं उसकी सलाह का पालन करता हूं।

पायथन के लिए सबसे अच्छा अभ्यास क्या है?

+5

कोई सर्वोत्तम अभ्यास नहीं है।जो सबसे अधिक समझ में आता है - शीर्ष के पास महत्वपूर्ण चीजें एक अच्छा विचार है, और स्थिरता आम तौर पर एक अच्छी बात है। पीईपी -8 इसका जिक्र नहीं करता है, और यदि इसे पत्थर में स्थापित किया जाना था, तो वह वही होगा। –

+3

और यहां तक ​​कि पीईपी 8 हमेशा पत्थर में स्थापित नहीं होता है। –

+1

मैं आमतौर पर कार्यक्षमता (प्राप्त, सेट, आदि) पर समूह द्वारा करता हूं – CppLearner

उत्तर

11

कोई भी सही आदेश नहीं है। एक प्रणाली उठाओ और इसके साथ छड़ी। एक मैं का उपयोग करें:

class SomeClass(object): 
    def __magic_methods__(self): 
     "magic methods first, usually in alphabetical order" 
    def _private_method(self): 
     "worker methods next, also in alpha order" 
    def a_method(self): 
     "then normal methods, also in alpha order" 
+0

staticmethods, class variables, और @property सजाए गए तरीकों के लिए आपकी प्राथमिकता क्या है? –

+0

@ जॉनीमी: कक्षा चर जो मैंने किसी और चीज़ से पहले रखा था; मेरी फोल्डिंग विधि '@ staticmethod',' @ classmethod', '@ property', और किसी अन्य '@ decorator' लाइनों को छुपाती है, इसलिए मैं यह निर्धारित करने के लिए विधि के प्रकार का उपयोग करता हूं कि यह कहां जाता है (अपवाद के साथ कि गुणों को जाना जाता है '_private_methods' और' normal_methods' के बीच)। –

+0

इसलिए यदि ऑर्डर मूल रूप से सामान्य "जादू" विधियों से निजी तरीकों से निजी हो जाता है, तो इसका मतलब है कि '@ classmethod का अगला आना है ('classmethod def a_class_method (cls) ') फिर @ staticmethod's (' @ staticmethod def a_static_method() ')? कम से कम यह नीति है क्योंकि मैं इसे समझता हूं ... ** (मेरे आईडीई को बिना किसी फोल्डिंग के क्योंकि मुझे यह पसंद नहीं है) ** – Kawu

1

मैं @Ethan को Django के स्रोत है, जहां मुख्य अंतर बड़ा है "############" ब्लॉक करने के लिए टिप्पणी में कहा कि मैंने देखा कि कुछ इसी तरह करते हैं क्षेत्रों को सीमित करें। उदाहरण के लिए,

class SomeClass(object): 
    ################# 
    # Magic Methods # 
    ################# 
    def __magic_methods__(self): 
     "magic methods first" 

    ################## 
    # Public Methods # 
    ################## 
    def a_method(self): 
     "then normal methods, in order of importance" 

    ################### 
    # Private Methods # 
    ################### 
    def _private_method(self): 
     "then worker methods, grouped by importance or related function" 

स्पष्ट रूप से यह छोटे वर्गों के लिए कम उपयोगी है।

+9

लेकिन मैं देख सकता हूं कि वे जादू, सार्वजनिक या निजी हैं। मैं सक्रिय रूप से टिप्पणियों के ऐसे ब्लॉक को नापसंद करता हूं; यदि मैं उन सभी की एक सूची देखना चाहता हूं तो मैं कोड को फोल्ड कर सकता हूं। कार्यक्षमता से संबंधित तरीकों के एक विशेष ब्लॉक के ऊपर एक टिप्पणी होने पर मैं कुछ करता हूं, लेकिन इस प्रकार की टिप्पणी के लिए - विधि नाम मुझे बताता है। –

+0

फिर से, मैं केवल बड़े वर्गों के लिए ऐसा करता हूं। मुझे लगता है कि अर्द्ध-निजी (_) और नाम-उलझन (__) विधियों के साथ जादू विधियों को भ्रमित करना आसान है। –

13

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

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

  • गुण, जादू कार्य, सार्वजनिक विधियां: उन तीनों के बीच सबसे अच्छा क्रम परिभाषित करना मुश्किल है, जो कक्षा के इंटरफ़ेस का हिस्सा हैं। @EthanFurman कहते हैं, पूरी परियोजना के लिए एक प्रणाली के साथ रहना सबसे महत्वपूर्ण है। आम तौर पर, लोग कक्षा में सबसे अच्छे पहले कार्य के लिए __init__() की अपेक्षा करते हैं, इसलिए मैं नीचे दिए गए अन्य जादू विधियों का पालन करता हूं।

  • पढ़ना आदेश: असल में, कहानी कहने के दो तरीके हैं: नीचे या ऊपर-नीचे। पहले उच्च स्तरीय कार्यों को डालकर, डेवलपर को पहले कुछ पंक्तियों को पढ़कर कक्षा की किसी न किसी समझ को समझ सकता है। अन्यथा, कक्षा की किसी भी समझ को प्राप्त करने के लिए किसी को पूरी कक्षा को पढ़ना होगा और अधिकांश डेवलपर्स के पास समय नहीं होगा। अंगूठे के नियम के रूप में, अपने शरीर से बुलाए गए सभी तरीकों से ऊपर विधियों को डालें।

  • कक्षा तरीकों और स्थिर तरीके: आमतौर पर, यह पढ़ने के क्रम से गर्भित कि ऊपर बताया गया है। सामान्य तरीके सभी विधियों के समय को कॉल कर सकते हैं और इस तरह पहले आते हैं। कक्षा के तरीके केवल कक्षा विधियों और स्थिर तरीकों को कॉल कर सकते हैं और अगले आते हैं। स्टेटिक विधियां कक्षा के अन्य तरीकों को कॉल नहीं कर सकतीं और आखिरी बार आ सकती हैं।

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

+0

आमतौर पर एक भाषा ऑर्डरिंग लागू नहीं करती है। लेकिन कुछ भाषाओं में आम सम्मेलन होते हैं। जैसे [सी # स्टाइलकॉप] (https://github.com/StyleCop/StyleCop) में सख्त ऑर्डरिंग नियम हैं। जावा के लिए http://stackoverflow.com/questions/4668218 इत्यादि देखें। – xmedeko

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

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