पायथन के मैजिक मेथड्स और डंडर फंक्शन्स को समझना

पायथन में, मैजिक मेथड्स, जिन्हें अक्सर dunder मेथड्स (double underscore का संक्षिप्त रूप) के रूप में संदर्भित किया जाता है, विशेष मेथड्स हैं जो डबल अंडरस्कोर से शुरू और खत्म होते हैं। ये मेथड्स आपको यह परिभाषित करने की अनुमति देते हैं कि आपके क्लास के ऑब्जेक्ट बिल्ट-इन ऑपरेशन और फ़ंक्शन के साथ कैसे व्यवहार करते हैं। वे पायथन की ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के अभिन्न अंग हैं और आपकी कक्षाओं की कार्यक्षमता और लचीलेपन को महत्वपूर्ण रूप से बढ़ा सकते हैं।

जादुई तरीके क्या हैं?

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

सामान्यतः प्रयुक्त जादू विधियाँ

  • __init__: एक नई ऑब्जेक्ट को आरंभ करता है।
  • __str__: किसी ऑब्जेक्ट का स्ट्रिंग प्रतिनिधित्व परिभाषित करता है।
  • __repr__: किसी ऑब्जेक्ट का एक औपचारिक स्ट्रिंग प्रतिनिधित्व परिभाषित करता है जिसका उपयोग आदर्श रूप से ऑब्जेक्ट को पुनः बनाने के लिए किया जा सकता है।
  • __add__: योग ऑपरेटर के व्यवहार को परिभाषित करता है।
  • __eq__: समानता तुलना को परिभाषित करता है।
  • __len__: ऑब्जेक्ट की लंबाई लौटाता है।
  • __getitem__: ऑब्जेक्ट में अनुक्रमण की अनुमति देता है।
  • __setitem__: किसी आइटम को विशिष्ट इंडेक्स पर सेट करने की अनुमति देता है।

उदाहरण: जादुई तरीकों को लागू करना

आइए देखें कि इनमें से कुछ जादुई विधियों को कस्टम क्लास में कैसे लागू किया जाए। हम Vector नामक एक सरल क्लास बनाएंगे जो गणितीय वेक्टर का प्रतिनिधित्व करता है और जोड़ और स्ट्रिंग प्रतिनिधित्व जैसे बुनियादी ऑपरेशन को लागू करता है।

उदाहरण: मैजिक विधियों के साथ वेक्टर क्लास

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"Vector({self.x}, {self.y})"

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

    def __len__(self):
        return 2  # A vector has two components

# Creating instances of Vector
v1 = Vector(2, 3)
v2 = Vector(4, 5)

# Using magic methods
print(v1)               # Output: Vector(2, 3)
print(repr(v2))         # Output: Vector(4, 5)
print(v1 + v2)          # Output: Vector(6, 8)
print(v1 == v2)         # Output: False
print(len(v1))          # Output: 2

इस उदाहरण में, हम __init__, __str__, __repr__, __add__, __eq__, तथा __len__ जादुई विधियों को Vector वर्ग के विभिन्न संक्रियाओं तथा अभ्यावेदनों को संभालने के लिए परिभाषित करते हैं।

उन्नत जादू विधियाँ

आमतौर पर प्रयुक्त जादू विधियों के अतिरिक्त, कई अन्य विधियां भी हैं जो अधिक विशिष्ट व्यवहार को नियंत्रित करती हैं:

  • __call__: किसी ऑब्जेक्ट को फ़ंक्शन के रूप में कॉल करने की अनुमति देता है।
  • __contains__: जाँचता है कि कोई आइटम कंटेनर में है या नहीं।
  • __enter__ और __exit__: सेटअप और टियरडाउन ऑपरेशन को संभालने के लिए संदर्भ प्रबंधकों में उपयोग किया जाता है।

उदाहरण: __call__ और __contains__ का उपयोग करना

class CallableVector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __call__(self, scale):
        return Vector(self.x * scale, self.y * scale)

    def __contains__(self, value):
        return value in (self.x, self.y)

# Creating an instance of CallableVector
cv = CallableVector(2, 3)

# Using __call__
scaled_vector = cv(10)
print(scaled_vector)  # Output: Vector(20, 30)

# Using __contains__
print(2 in cv)        # Output: True
print(5 in cv)        # Output: False

इस उदाहरण में, __call__ विधि CallableVector के उदाहरणों को फ़ंक्शन की तरह कॉल करने की अनुमति देती है, जबकि __contains__ विधि वेक्टर के घटकों में सदस्यता की जांच करती है।

निष्कर्ष

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

लिंक
Python