2010-09-05 16 views
31

को कैसे सुलझाना है मैं कुछ परियोजनाओं में पीईक्यूटी का उपयोग शुरू कर रहा हूं और मैं एक स्टाइलिस्ट दुविधा में भाग रहा हूं। पीईक्यूटी के काम ऊंट के मामले का उपयोग करते हैं, लेकिन पीईपी 8, जिसे मैं पालन करना पसंद करता हूं, अंडरस्कोर और फ़ंक्शन नामों के लिए सभी लोअरकेस का उपयोग करने के लिए कहता है। तो एक तरफ, मैं पीईपी 8 का पालन करना जारी रख सकता हूं, जिसका अर्थ है कि मेरे कोड में मिश्रित फ़ंक्शंस ऊंट केस और अंडरस्कोर फ़ंक्शंस को कॉल करेंगे, और यहां तक ​​कि मेरे वर्गों में मिश्रित फ़ंक्शन नाम होंगे, क्योंकि मुझे माउसPressEvent जैसे ओवरलोडिंग फ़ंक्शन की आवश्यकता होगी । या, मैं पीईपी 8 तोड़ सकता हूं और स्थिरता के नाम पर अपने सभी फ़ंक्शन नामों के लिए ऊंट केस अपन सकता हूं।पीईपी 8 और पीईक्यूटी,

मुझे एहसास है कि यह व्यक्तिपरक है और यह वास्तव में वही है जो मैं व्यक्तिगत रूप से पसंद करता हूं, लेकिन मुझे दूसरों से यह सुनना अच्छा लगता है कि उन्होंने क्या किया और उन्होंने ऐसा क्यों किया।

+0

मैं अभी पीईक्यूटी से शुरुआत कर रहा हूं। क्या कार्य एकमात्र मुद्दा हैं, या पीईक्यूटी चर भी सामान्य रूप से उपयोग किए जाते हैं? मैं अपने PyQt यूआई कोड में कार्यों के लिए camelCase का उपयोग करने पर विचार कर रहा हूं, लेकिन फिर भी चर नामों के लिए पीईपी 8 सम्मेलनों का पालन कर रहा हूं। मैं इसके बारे में चिंतित हूं कि संभवतः बाद में एक गन्दा मिश्रण बना रहा हूं। –

+0

वैसे भी, मैं पूरी तरह से सहमत नहीं हूं कि यह व्यक्तिपरक है। मैं पीईक्यूटी की सराहना करता हूं, लेकिन मुझे लगता है कि उन्होंने पीईपी 8 का पालन नहीं करके एक असंतोष किया है। (फिर फिर, पुस्तकालय का नाम भी बहुत पाइथनिक नहीं है।_QtPy_ बहुत बेहतर रहा होगा, यह देखते हुए कि दो महाद्वीपों पर मिले सभी अंग्रेजी भाषी देवताओं ने इसे 'प्यारी-पाई' के रूप में उच्चारण किया होगा। ;-)) –

उत्तर

28

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

बेशक

, कुछ mixage अपरिहार्य आप एक से अधिक ढांचा ... उदाहरण के लिए, अपने CamelCase, और उनके लोअरकेस और अंडरस्कोर के साथ मानक अजगर पुस्तकालय कार्यों के साथ PyQt उपयोग कर रहे हैं है -!)। लेकिन चूंकि क्यूटी जैसे ढांचे को अक्सर उप-वर्गीकरण द्वारा विस्तारित किया जाना है, जबकि मानक पायथन पुस्तकालय में ऐसे डिज़ाइन के कम पहलू हैं, ज्यादातर मामलों में जहां पूंजीकरण शैली को मजबूर किया जाता है (क्योंकि आपको किसी विधि को ओवरराइड करने की आवश्यकता है, इसलिए आप नहीं कर सकते एक अलग पूंजीकरण चुनें), इसे कमरकेस (क्यूटी द्वारा) के लिए मजबूर किया जाएगा, केवल दुर्लभ रूप से लोअरकेस (मानक पायथन पुस्तकालय द्वारा) के लिए। इसलिए, मुझे लगता है कि इस मामले में क्यूटी शैली को अपनाना अभी भी कम बुराई है।

6

सबसे अच्छा फिट बैठता है का उपयोग करें।

यदि आप क्यूटी कक्षाओं को उपclassing कर रहे हैं, या उनके साथ UseCamelCase के साथ भारी रूप से एकीकृत एक समारोह है।

अन्यथा, use_underscores

+10

यह स्पष्ट रूप से कोड के पाठकों को दिखाता है जो क्यूटी से जुड़ा हुआ है, और क्या नहीं है। – EOL

+0

और एक अच्छे आवेदन में, कोड की एक न्यूनतम मात्रा वास्तव में जीयूआई टूलकिट का उपयोग कर रही है। – phkahler

0

शायद विभिन्न मॉड्यूल में शैलियों को अलग करने के लिए मॉड्यूल का समझदार उपयोग मदद कर सकता है। कम से कम सहायक पीईपी 8 स्टाइल कोड मॉड्यूलर को हेल्पर फ़ंक्शंस के मॉड्यूल के लिए मॉड्यूलर करने का प्रयास करें।

1

यदि आप इसे उपclass करते हैं तो आप अंडरस्कोर का उपयोग कर सकते हैं। और आप अंडरस्कोर के साथ अपने तरीकों का नाम दे सकते हैं और पीईक्यूटी 4 उनका उपयोग करने में सक्षम होगा जैसे कि आपने उन्हें camelCase के साथ नाम दिया है।

class SomeClass(object): 
    def __getattr__(self, attr): 
     if '_' in attr: 
      new = [c for c in attr] 
      while True: 
       try: 
        new_char = new[new.index('_') + 1].upper() 
        new[new.index('_'):new.index('_') + 2] = new_char 
       except (IndexError, ValueError): 
        break 
     else: 
      for c in attr: 
       if c.isupper(): 
        new = [] 
        for i, c in enumerate(attr): 
         if i != 0 and c.isupper(): 
          new.append('_') 
         new.append(c.lower()) 
        break 
     try: 
      return super(type(self), self).__getattribute__(''.join(new)) 
     except Exception: 
      return super(type(self), self).__getattribute__(attr) 
+6

यह कॉस्मेटिक प्रभाव के लिए सबसे अच्छी चाल है। –

11

pep8 दस्तावेज़ का कहना है कि इस मामले में (जोर मेरा) करने के लिए:

नए मॉड्यूल और पैकेज (तीसरे पक्ष के चौखटे सहित) इन मानकों को पत्र लिखा जाना चाहिए, लेकिन जहां एक मौजूदा पुस्तकालय एक अलग शैली है, आंतरिक स्थिरता को प्राथमिकता दी जाती है।

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