अजगर डिजाइन पैटर्न [बंद]


166

मैं ऐसे किसी भी संसाधन की तलाश कर रहा हूं, जो पायथन का उपयोग करके बेस्ट प्रैक्टिसेज, डिजाइन पैटर्न और SOLID सिद्धांतों का उदाहरण देता हो।



जवाबों:


152

इनमें कुछ ओवरलैप हैं

अजगर में इंटरमीडिएट और एडवांस्ड सॉफ्टवेयर बढ़ईगीरी

एक अजगर की तरह कोड: मुहावरेदार पायथन

पायथन मुहावरे और दक्षता

Google डेवलपर्स डे यूएस - पायथन डिज़ाइन पैटर्न

एक अन्य संसाधन पायथन व्यंजनों में उदाहरण के लिए है । एक अच्छी संख्या सर्वोत्तम प्रथाओं का पालन नहीं करती है लेकिन आप वहां कुछ पैटर्न पा सकते हैं जो उपयोगी हैं


1
तीसरा लिंक मर चुका है। दर्पण खोजने की कोशिश की, लेकिन अगर किसी के पास सही लिंक नहीं है, तो कृपया जोड़ें
formatkaka

1
यहाँ भी, पायथन मुहावरे और दक्षता काम नहीं लगती है।
दाविद लास्ज़ुक

पहले और दूसरे लिंक मृत थे इसलिए मैंने उन्हें इंटरनेट आर्काइव स्नैपशॉट के साथ अपडेट किया। वे हालांकि बहुत पुराने लग रहे हैं, हालांकि मुझे यकीन है कि यह अभी भी प्रासंगिक है।
mannykary

24

प्रकार

>>> import this

पायथन कंसोल में।

हालांकि यह आमतौर पर एक (ठीक!) मजाक के रूप में माना जाता है, इसमें कुछ मान्य अजगर-विशिष्ट स्वयंसिद्ध जोड़े होते हैं।



6

आप यहां और यहां से शुरुआत कर सकते हैं

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


8
मुझे लगता है कि डिजाइन पैटर्न को लागू करने के लिए मुहावरेदार अजगर का उपयोग कैसे करें, यह समझना महत्वपूर्ण है। यह C ++ की तुलना में बहुत अलग भाषा है, जिसका उपयोग GOF में किया जाता है, इस प्रकार C ++ से अजगर में पोर्ट करने के परिणामस्वरूप गैर-पायथन कोड होगा।
साकिस

1
मैं असहमत हूं। एक सिंगलटन डीपी या अन्य डीपी किसी भी ओओ भाषा में संभव होगा, चाहे वह पायथन, जावा या सी ++ हो। आपकी राय में गैर-पायथोनिक क्या है?
पॉल हैमस्ट्रा

1
पहला लिंक एक काफी खराब पेपर है, जिसमें पायथन के बारे में कई गलत दावे हैं। दूसरा वर्तमान में 404 है, इस प्रकार, मुझे लगता है, बहुत कम नुकसान कर :) :)
ब्रैंडन रोड्स

6

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

मोटे तौर पर, नल की वस्तुओं के साथ लक्ष्य अन्य भाषाओं में अक्सर इस्तेमाल किए गए आदिम डेटा प्रकार कोई नहीं पायथन या नल (या अशक्त संकेत) के लिए एक 'बुद्धिमान' प्रतिस्थापन प्रदान करना है। इनका उपयोग कई मामलों के लिए किया जाता है, जिसमें महत्वपूर्ण मामला भी शामिल है, जहाँ कुछ तत्वों के समूह का एक सदस्य किसी भी कारण से विशेष है। ज्यादातर यह सामान्य तत्वों और आदिम अशक्त मूल्य के बीच अंतर करने के लिए सशर्त बयानों के परिणामस्वरूप होता है।

यह ऑब्जेक्ट केवल विशेषता त्रुटि की कमी को खाती है, और आप उनके अस्तित्व की जांच करने से बच सकते हैं।

इससे ज्यादा कुछ नहीं है

class Null(object):

    def __init__(self, *args, **kwargs):
        "Ignore parameters."
        return None

    def __call__(self, *args, **kwargs):
        "Ignore method calls."
        return self

    def __getattr__(self, mname):
        "Ignore attribute requests."
        return self

    def __setattr__(self, name, value):
        "Ignore attribute setting."
        return self

    def __delattr__(self, name):
        "Ignore deleting attributes."
        return self

    def __repr__(self):
        "Return a string representation."
        return "<Null>"

    def __str__(self):
        "Convert to a string and return it."
        return "Null"

इसके साथ, यदि आप ऐसा करते हैं तो Null("any", "params", "you", "want").attribute_that_doesnt_exists()विस्फोट नहीं होगा, लेकिन बस चुपचाप इसके बराबर हो जाता है pass

आम तौर पर आप ऐसा कुछ करते हैं

if obj.attr:
    obj.attr()

इसके साथ, आप बस करें:

obj.attr()

और इसके बारे में भूल जाओ। खबरदार कि Nullवस्तु का व्यापक उपयोग संभवतः आपके कोड में कीड़े छिपा सकता है।


3

आप इस लेख (.pdf फ़ाइल का चयन करें) को पढ़ने की इच्छा कर सकते हैं , जो गतिशील वस्तु उन्मुख भाषाओं (यानी पायथन) में डिज़ाइन पैटर्न पर चर्चा करता है। पृष्ठ को उद्धृत करने के लिए:

यह पेपर बताता है कि "गैंग ऑफ़ फोर", या "GOF" पुस्तक से पैटर्न, जैसा कि अक्सर कहा जाता है, तब प्रकट होता है जब इसी तरह की समस्याओं को एक गतिशील, उच्च-क्रम, ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषा का उपयोग करके संबोधित किया जाता है। कुछ पैटर्न गायब हो जाते हैं - अर्थात, वे सीधे भाषा सुविधाओं द्वारा समर्थित होते हैं, कुछ पैटर्न सरल होते हैं या एक अलग फ़ोकस होते हैं, और कुछ अनिवार्य रूप से अपरिवर्तित होते हैं।


1
सवाल अजगर के बारे में था; कागज योजना-जैसी भाषा के बारे में बात करता है, जो कि मैं बता सकता हूं, इस विशेष पेपर के लिए ऑन-द-स्पॉट का आविष्कार किया। जब तक प्रश्नकर्ता (ए) पायथन प्रथाओं के साथ (ख) लंबे अनुभव के साथ एक अकादमिक कंप्यूटर वैज्ञानिक नहीं है, मुझे संदेह है कि अगर उन्हें पेपर से बाहर मूल्य का कुछ भी मिल सकता है - और, इस बिंदु से अधिक, तो उन्होंने शायद यह सवाल नहीं पूछा होगा पहली जगह में। :)
ब्रैंडन रोड्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.