python - पायथन डिजाइन पैटर्न



design-patterns (6)

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


Answers

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

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



प्रकार

>>> import this

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

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


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

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

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

यह कुछ भी नहीं है

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 ऑब्जेक्ट का व्यापक उपयोग संभावित रूप से आपके कोड में बग को छुपा सकता है।


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

पाइथन में इंटरमीडिएट और उन्नत सॉफ्टवेयर बढ़ईगीरी

एक पाइथोनिस्टा की तरह कोड: Idiomatic पायथन

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

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

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


मैं जेरेमी गिब्न्स द्वारा कुछ उत्कृष्ट लेकिन कुछ घने कागजात प्लग करना चाहता हूं: "डिजाइन पैटर्न पैटर्न उच्च-आदेश डेटाटाइप-जेनेरिक प्रोग्राम" और "इटरेटर पैटर्न का सार" (दोनों यहां उपलब्ध हैं: http://www.comlab.ox.ac.uk/jeremy.gibbons/publications/ )।

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





python design-patterns