polymorphism in python in hindi

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

polymorphism in python in hindi
polymorphism in python in hindi


पायथन में बहुरूपता का परिचय

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

बहुरूपता को समझना

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

बहुरूपता की परिभाषा

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

बहुरूपता का उपयोग करने के लाभ

पायथन में बहुरूपता का उपयोग करने से कई लाभ मिलते हैं, जिनमें शामिल हैं:

  • कोड पुन: प्रयोज्यता: बहुरूपता विभिन्न वर्गों की वस्तुओं को एक सामान्य तरीके से परस्पर उपयोग करने की अनुमति देकर कोड के पुन: उपयोग को बढ़ावा देती है।
  • लचीलापन: बहुरूपता लचीले कोड डिज़ाइन की अनुमति देता है, क्योंकि वस्तुएं विभिन्न स्थितियों और संदर्भों के अनुकूल हो सकती हैं।
  • सरलीकृत कोड: बहुरूपता का लाभ उठाकर, कोड अधिक संक्षिप्त, पठनीय और बनाए रखने योग्य हो जाता है।

पायथन में बहुरूपता के प्रकार

पायथन तीन प्रकार के बहुरूपता का समर्थन करता है: मेथड ओवरराइडिंग, मेथड ओवरलोडिंग और ऑपरेटर ओवरलोडिंग। आइए प्रत्येक प्रकार के बारे में विस्तार से जानें।

ओवरराइडिंग विधि

मेथड ओवरराइडिंग तब होती है जब एक उपवर्ग अपने सुपरक्लास में एक विधि के समान नाम के साथ एक विधि को परिभाषित करता है। उपवर्ग की विधि सुपरक्लास की विधि के कार्यान्वयन को ओवरराइड करती है। यह उपवर्ग को विरासत में मिली पद्धति का एक विशेष कार्यान्वयन प्रदान करने की अनुमति देता है।

परिभाषा और अवधारणा

मेथड ओवरराइडिंग एक उपवर्ग की एक विधि का एक अलग कार्यान्वयन प्रदान करने की क्षमता है जो पहले से ही अपने सुपरक्लास में परिभाषित है। यह उपवर्ग को विरासत में मिली पद्धति के व्यवहार को संशोधित या विस्तारित करने की अनुमति देता है।

ओवरराइडिंग विधि का उदाहरण

class Animal:
    def make_sound(self):
        print("Animal makes a sound")


class Cat(Animal):
    def make_sound(self):
        print("Meow!")


animal = Animal()
animal.make_sound()  # Output: "Animal makes a sound"

cat = Cat()
cat.make_sound()  # Output: "Meow!"

इस उदाहरण में,बिल्ली वर्ग ओवरराइड करता हैआवाज़ करना() विधि से विरासत में मिला हैजानवर कक्षा। जब हम कॉल करते हैंआवाज़ करना() के एक उदाहरण पर विधिबिल्ली क्लास, यह "म्याऊ!" डिफ़ॉल्ट ध्वनि के बजाय।

मेथड ओवरराइडिंग के फायदे

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

विधि ओवरलोडिंग

मेथड ओवरलोडिंग एक ही नाम लेकिन अलग-अलग मापदंडों के साथ कई तरीकों को परिभाषित करने के लिए संदर्भित करता है। विधियों को उनकी संख्या, प्रकार, या पैरामीटर के क्रम से अलग किया जाता है। पायथन पारंपरिक अर्थों में मेथड ओवरलोडिंग का समर्थन नहीं करता है, लेकिन समान कार्यक्षमता प्राप्त करने के लिए वर्कअराउंड हैं।

परिभाषा और अवधारणा

मेथड ओवरलोडिंग एक ही नाम के साथ कई तरीकों को परिभाषित करने की क्षमता है लेकिन एक वर्ग के भीतर अलग-अलग पैरामीटर हैं। यह प्रदान किए गए तर्कों के आधार पर विभिन्न संचालन करने के तरीकों की अनुमति देता है।

मेथड ओवरलोडिंग का उदाहरण

class Calculator:
    def add(self, a, b):
        return a + b

    def add(self, a, b, c):
        return a + b + c


calc = Calculator()
result1 = calc.add(2, 3)  # Output: 5
result2 = calc.add(2, 3, 4)  # Output: 9

इस उदाहरण में,कैलकुलेटर कक्षा में दो हैंजोड़ना() विधियों, प्रत्येक पैरामीटर की एक अलग संख्या के साथ। जब हम कॉल करते हैंजोड़ना() विधि दो तर्कों के साथ, यह दो संख्याओं के साथ योग करता है। यदि हम इसे तीन तर्कों के साथ कहते हैं, तो यह तीनों संख्याओं को एक साथ जोड़ता है।

मेथड ओवरलोडिंग के फायदे

यद्यपि पायथन पारंपरिक विधि ओवरलोडिंग का समर्थन नहीं करता है, समान कार्यक्षमता प्राप्त करने से कोड की पठनीयता में वृद्धि हो सकती है और विभिन्न नामों के साथ कई विधियों को बनाने की आवश्यकता कम हो सकती है। डिफ़ॉल्ट पैरामीटर मान या चर तर्कों का उपयोग करके, हम विधि अधिभार व्यवहार का अनुकरण कर सकते हैं।

ऑपरेटर ओवरलोडिंग

ऑपरेटर ओवरलोडिंग ऑपरेटरों के लिए कस्टम परिभाषाओं को सक्षम करता है, उपयोगकर्ता परिभाषित वर्गों की वस्तुओं को अंतर्निर्मित प्रकारों की तरह व्यवहार करने की इजाजत देता है। यह सुविधा हमें ऑपरेटरों के व्यवहार को परिभाषित करने की अनुमति देती है जैसे+,-,*,/, और हमारी कस्टम कक्षाओं के लिए और भी बहुत कुछ।

परिभाषा और अवधारणा

ऑपरेटर ओवरलोडिंग उपयोगकर्ता परिभाषित वर्गों की वस्तुओं पर लागू होने पर ऑपरेटरों के व्यवहार को परिभाषित करने की क्षमता है। यह वस्तुओं को जोड़, घटाव और तुलना जैसे कार्यों में भाग लेने की अनुमति देता है, जैसे कि वे अंतर्निहित प्रकार थे।

ऑपरेटर ओवरलोडिंग का उदाहरण

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

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

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


v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
print(v3)  # Output: (4, 6)

इस उदाहरण में,वेक्टर वर्ग परिभाषित करता है__जोड़ना__() विधि, जो अनुमति देता है+ ऑपरेटर दो के बीच प्रयोग किया जाता हैवेक्टर वस्तुओं। जब हम दो जोड़ते हैंवेक्टर उदाहरण एक साथ,__जोड़ना__() विधि कहा जाता है, और एक newवेक्टर ऑब्जेक्ट उनके घटकों के योग के साथ लौटाया जाता है।

ऑपरेटर ओवरलोडिंग के लाभ

ऑपरेटर ओवरलोडिंग वस्तुओं को अंतर्निर्मित प्रकारों के समान व्यवहार प्रदर्शित करने की अनुमति देता है, कस्टम कक्षाओं के साथ काम करने का अधिक सहज और प्राकृतिक तरीका प्रदान करता है। यह कोड पठनीयता में सुधार करता है और स्पष्ट विधि कॉल की आवश्यकता को कम करता है, जिससे कोड अधिक संक्षिप्त हो जाता है।

पायथन में बहुरूपता को लागू करना

अब जब हम विभिन्न प्रकार के बहुरूपता को समझते हैं, तो आइए देखें कि हम पायथन में बहुरूपता को कैसे लागू और उपयोग कर सकते हैं।

एक बहुरूपी वर्ग बनाना

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

class Shape:
    def calculate_area(self):
        pass


class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def calculate_area(self):
        return self.width * self.height


class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def calculate_area(self):
        return 3.14 * self.radius ** 2

इस उदाहरण में,आकार वर्ग सुपरक्लास के रूप में कार्य करता है, परिभाषित करता हैकैलकुलेट_एरिया () तरीका।आयत औरघेरा वर्ग से विरासत में मिला हैआकार और ओवरराइड करेंकैलकुलेट_एरिया () उनके विशिष्ट कार्यान्वयन के साथ विधि।

बहुरूपी कार्यों का उपयोग करना

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

def print_area(shape):
    print("Area:", shape.calculate_area())


rectangle = Rectangle(4, 5)
circle = Circle(3)

print_area(rectangle)  # Output: Area: 20
print_area(circle)  # Output: Area: 28.26

इस उदाहरण में,प्रिंट क्षेत्र() समारोह ए स्वीकार करता हैआकार एक तर्क के रूप में वस्तु। यह कॉल करता हैकैलकुलेट_एरिया () प्रदत्त वस्तु पर विधि, भले ही यह एक उदाहरण है या नहींआयत याघेरा. यह कार्रवाई में बहुरूपता दिखाता है, क्योंकि एक ही कार्य विभिन्न प्रकार की वस्तुओं के साथ काम कर सकता है।

वंशानुक्रम के साथ बहुरूपता

बहुरूपता और वंशानुक्रम अक्सर हाथ से जाते हैं, क्योंकि विरासत में मिली कक्षाओं के साथ काम करते समय बहुरूपता का पूरी तरह से उपयोग किया जा सकता है।

वंशानुक्रम अवलोकन

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

इनहेरिटेड क्लासेस में ओवरराइडिंग मेथड्स

जब एक उपवर्ग अपने सुपरक्लास से एक विधि प्राप्त करता है, तो उसके पास अपना कार्यान्वयन प्रदान करके विरासत में मिली विधि को ओवरराइड करने का विकल्प होता है। यह विरासत में मिले व्यवहार के अनुकूलन को सक्षम करता है और उपवर्गों को कार्यक्षमता को विशेषज्ञ बनाने की अनुमति देता है।

विरासत में मिली कक्षाओं के साथ बहुरूपता का उपयोग करना

विरासत में मिली कक्षाओं के साथ बहुरूपता हमें सुपरक्लास और उसके उपवर्गों की वस्तुओं को परस्पर विनिमय करने की अनुमति देता है। हम विभिन्न उपवर्गों की वस्तुओं के साथ काम करने के लिए सुपरक्लास द्वारा प्रदान किए गए समान इंटरफ़ेस का उपयोग कर सकते हैं।

class Animal:
    def sound(self):
        print("Animal makes a sound")


class Dog(Animal):
    def sound(self):
        print("Dog barks")


class Cat(Animal):
    def sound(self):
        print("Cat meows")


def make_sound(animal):
    animal.sound()


animal = Animal()
dog = Dog()
cat = Cat()

make_sound(animal)  # Output: Animal makes a sound
make_sound(dog)  # Output: Dog barks
make_sound(cat)  # Output: Cat meows

इस उदाहरण में,जानवर क्लास सुपरक्लास है, औरकुत्ता औरबिल्ली वर्ग इसके उपवर्ग हैं।आवाज़ करना() फ़ंक्शन इनमें से किसी भी वर्ग की वस्तुओं को स्वीकार कर सकता है और कॉल कर सकता हैआवाज़() उन पर विधि। यह बहुरूपता प्रदर्शित करता है, क्योंकि एक ही कार्य विभिन्न प्रकार की वस्तुओं के साथ काम करता है।

पायथन पुस्तकालयों में बहुरूपता

बहुरूपता उपयोगकर्ता-परिभाषित वर्गों तक सीमित नहीं है; यह विभिन्न पायथन पुस्तकालयों में भी प्रचलित है।

NumPy में बहुरूपता

NumPy, Python में एक शक्तिशाली संख्यात्मक कंप्यूटिंग लाइब्रेरी, बहुरूपता का व्यापक रूप से लाभ उठाती है। यह एक बहुआयामी सरणी वस्तु प्रदान करता है,ndarray, जो तत्व-वार संचालन और कार्यों का समर्थन करता है।

import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

result = array1 + array2
print(result)  # Output: [5, 7, 9]

इस उदाहरण में, NumPy सरणियाँ तत्व-वार जोड़ का समर्थन करती हैं।+ दो सरणियों के बीच ऑपरेटर तत्व-वार जोड़ करता है और संबंधित तत्वों के योग के साथ एक नया सरणी देता है।

पंडों में बहुरूपता

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

import pandas as pd

data1 = {"Name": ["John", "Alice"], "Age": [25, 30]}
data2 = {"Name": ["Bob"], "Age": [35]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

result = pd.concat([df1, df2])
print(result)

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

बहुरूपता का उपयोग करने के लिए सर्वोत्तम अभ्यास

अपने पायथन कोड में बहुरूपता का उपयोग करते समय, निम्नलिखित सर्वोत्तम प्रथाओं पर विचार करें:

लचीला और एक्स्टेंसिबल कोड डिजाइन करना

  • अमूर्तता: उपवर्गों में सुसंगत व्यवहार सुनिश्चित करने के लिए अमूर्त आधार वर्गों या इंटरफेस का उपयोग करके एक सामान्य इंटरफ़ेस को परिभाषित करें।
  • Encapsulation: मौजूदा कोड को प्रभावित किए बिना नए उपवर्गों को जोड़ना आसान बनाने के लिए कक्षाओं के भीतर संबंधित व्यवहार और विशेषताओं को एनकैप्सुलेट करें।

स्वच्छ और पठनीय कोड लिखना

  • सार्थक नामकरण: कोड की समझ बढ़ाने के लिए कक्षाओं, विधियों और चरों के लिए वर्णनात्मक और अर्थपूर्ण नामों का उपयोग करें।
  • दस्तावेज़ीकरण: आपके कोड के साथ काम करने वाले अन्य डेवलपर्स को मार्गदर्शन करने के लिए कक्षाओं और विधियों के लिए स्पष्ट और संक्षिप्त दस्तावेज़ीकरण प्रदान करें।

निष्कर्ष

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

अक्सर पूछे जाने वाले प्रश्न (एफएक्यू)

पायथन में बहुरूपता का मुख्य लाभ क्या है?

बहुरूपता कोड पुन: प्रयोज्यता, लचीलेपन और सरलीकृत कोड डिज़ाइन को बढ़ावा देता है। यह विभिन्न वर्गों की वस्तुओं को एक दूसरे के साथ व्यवहार करने की अनुमति देता है, कोडबेस की व्यापकता और रखरखाव में सुधार करता है।

क्या हम पायथन में मेथड ओवरलोडिंग प्राप्त कर सकते हैं?

पायथन विभिन्न विधि हस्ताक्षरों के साथ पारंपरिक विधि अधिभार का समर्थन नहीं करता है। हालाँकि, हम डिफ़ॉल्ट पैरामीटर मान या चर तर्कों का उपयोग करके समान व्यवहार प्राप्त कर सकते हैं।

बहुरूपता कोड पठनीयता को कैसे बढ़ाता है?

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

कौन सा पायथन पुस्तकालय बड़े पैमाने पर बहुरूपता का उपयोग करता है?

न्यूमपी और पंडों जैसे पायथन पुस्तकालय बहुरूपता का व्यापक उपयोग करते हैं। NumPy सरणियाँ और पांडा डेटाफ़्रेम तत्व-वार संचालन और कार्यों का समर्थन करते हैं, जिससे कोड को अधिक संक्षिप्त और कुशल तरीके से लिखा जा सकता है।

बहुरूपता उपयोगकर्ता परिभाषित वर्गों तक ही सीमित है?

नहीं, बहुरूपता उपयोगकर्ता परिभाषित वर्गों तक ही सीमित नहीं है। पायथन पुस्तकालय अक्सर बहुरूपी व्यवहार को लागू करते हैं, जिससे कोड को इस तरह से लिखा जा सकता है जो विभिन्न प्रकार की वस्तुओं के साथ मूल रूप से काम कर सके।
Tags

एक टिप्पणी भेजें

0 टिप्पणियाँ
* Please Don't Spam Here. All the Comments are Reviewed by Admin.