पायथन की गतिशील प्रकृति और डक टाइपिंग के लिए समर्थन की उनके लचीलेपन के लिए लंबे समय से प्रशंसा की गई है। हालाँकि, जैसे-जैसे कोडबेस बड़े और अधिक जटिल होते जाते हैं, स्थैतिक प्रकार की जाँच के लाभ तेजी से स्पष्ट होते जाते हैं। लेकिन हम स्थैतिक प्रकार की जाँच की सुरक्षा के साथ डक टाइपिंग के लचीलेपन को कैसे समेट सकते हैं? पायथन की प्रोटोकॉल कक्षा दर्ज करें।
इस ट्यूटोरियल में, आप सीखेंगे:
डक टाइपिंग एक प्रोग्रामिंग अवधारणा है जहां किसी ऑब्जेक्ट का प्रकार या वर्ग उसके द्वारा परिभाषित तरीकों से कम महत्वपूर्ण है। यह इस विचार पर आधारित है कि "यदि यह बत्तख की तरह दिखता है, बत्तख की तरह तैरता है, और बत्तख की तरह टर्राता है, तो संभवतः यह बत्तख है।"
पायथन में, डक टाइपिंग पूरी तरह से समर्थित है। उदाहरण के लिए:
class Duck: def quack(self): print("Quack!") class Person: def quack(self): print("I'm imitating a duck!") def make_it_quack(thing): # Note: No type hint here thing.quack() duck = Duck() person = Person() make_it_quack(duck) # Output: Quack! make_it_quack(person) # Output: I'm imitating a duck!
इस उदाहरण में, make_it_quack चीज़ के प्रकार की परवाह नहीं करता है। यह केवल इस बात की परवाह करता है कि उस चीज़ में एक नीम-हकीम पद्धति है। ध्यान दें कि चीज़ पैरामीटर के लिए कोई प्रकार का संकेत नहीं है, जो डक-टाइप कोड में विशिष्ट है लेकिन बड़े कोडबेस में समस्याएं पैदा कर सकता है।
डक टाइपिंग कई फायदे प्रदान करती है:
हालांकि, इसमें कुछ कमियां भी हैं:
इन मुद्दों को संबोधित करने का एक तरीका एब्सट्रैक्ट बेस क्लासेस (एबीसी) का उपयोग करना है। यहाँ एक उदाहरण है:
from abc import ABC, abstractmethod class Quacker(ABC): @abstractmethod def quack(self): pass class Duck(Quacker): def quack(self): print("Quack!") class Person(Quacker): def quack(self): print("I'm imitating a duck!") def make_it_quack(thing: Quacker): thing.quack() duck = Duck() person = Person() make_it_quack(duck) make_it_quack(person)
हालाँकि यह दृष्टिकोण बेहतर प्रकार की जाँच और स्पष्ट इंटरफ़ेस प्रदान करता है, इसके नुकसान भी हैं:
पायथन 3.8 ने प्रोटोकॉल क्लास पेश किया, जो हमें इनहेरिटेंस की आवश्यकता के बिना इंटरफेस को परिभाषित करने की अनुमति देता है। यहां बताया गया है कि हम इसका उपयोग कैसे कर सकते हैं:
from typing import Protocol class Quacker(Protocol): def quack(self):... class Duck: def quack(self): print("Quack!") class Person: def quack(self): print("I'm imitating a duck!") def make_it_quack(thing: Quacker): thing.quack() duck = Duck() person = Person() make_it_quack(duck) make_it_quack(person)
आइए इसे तोड़ें:
यह दृष्टिकोण हमें कई लाभ देता है:
यहां एक अधिक जटिल उदाहरण दिया गया है जो दिखाता है कि प्रोटोकॉल आपके डोमेन वर्गों (सर्कल, आयत) को सपाट रखते हुए आवश्यकतानुसार जटिल (आकार) कैसे हो सकते हैं:
from typing import Protocol, List class Drawable(Protocol): def draw(self): ... class Resizable(Protocol): def resize(self, factor: float): ... class Shape(Drawable, Resizable, Protocol): pass def process_shapes(shapes: List[Shape]): for shape in shapes: shape.draw() shape.resize(2.0) # Example usage class Circle: def draw(self): print("Drawing a circle") def resize(self, factor: float): print(f"Resizing circle by factor {factor}") class Rectangle: def draw(self): print("Drawing a rectangle") def resize(self, factor: float): print(f"Resizing rectangle by factor {factor}") # This works with any class that has draw and resize methods, # regardless of its actual type or inheritance shapes: List[Shape] = [Circle(), Rectangle()] process_shapes(shapes)
इस उदाहरण में, वृत्त और आयत आकार या किसी अन्य वर्ग से विरासत में नहीं मिले हैं। वे बस आवश्यक तरीकों को लागू करते हैं (आकर्षित करें और आकार बदलें)। प्रोसेस_शेप्स फ़ंक्शन किसी भी ऑब्जेक्ट के साथ काम कर सकता है जिसमें ये विधियां हैं, शेप प्रोटोकॉल के लिए धन्यवाद।
पायथन में प्रोटोकॉल स्थिर टाइपिंग को डक-टाइप कोड में लाने का एक शक्तिशाली तरीका प्रदान करते हैं। वे हमें इनहेरिटेंस की आवश्यकता के बिना टाइप सिस्टम में इंटरफेस निर्दिष्ट करने की अनुमति देते हैं, स्थिर प्रकार की जाँच के लाभों को जोड़ते हुए डक टाइपिंग के लचीलेपन को बनाए रखते हैं,
प्रोटोकॉल का उपयोग करके, आप यह कर सकते हैं:
यदि आप पायथन में प्रोटोकॉल और टाइप हिंटिंग के बारे में अधिक जानना चाहते हैं, तो टाइपिंग मॉड्यूल पर आधिकारिक पायथन दस्तावेज़ देखें, या mypy जैसे उन्नत स्थिर प्रकार जांच टूल का पता लगाएं।
हैप्पी कोडिंग, और आपकी बत्तखें हमेशा प्रकार की सुरक्षा के साथ चहकती रहें!
आप मेरे न्यूज़लेटर सहित मेरी अधिक सामग्री यहां पा सकते हैं
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3