अजगर वंशानुक्रम (उदाहरण के साथ)

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

वीडियो: पायथन वंशानुक्रम

पायथन में वंशानुक्रम

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में इनहेरिटेंस एक शक्तिशाली विशेषता है।

यह एक नए वर्ग को परिभाषित करने के साथ एक मौजूदा कक्षा में बहुत कम या कोई संशोधन नहीं करता है। नई कक्षा को व्युत्पन्न (या बच्चे) वर्ग कहा जाता है और जिस से यह विरासत में मिलती है उसे आधार (या माता-पिता) वर्ग कहा जाता है ।

पायथन इनहेरिटेंस सिंटेक्स

 क्लास बेसक्लास: बेस क्लास की बॉडी डेरिवक्लास (बेसक्लास): व्युत्पन्न वर्ग की बॉडी

व्युत्पन्न वर्ग को आधार वर्ग की विशेषताएं विरासत में मिली हैं जहाँ नई सुविधाएँ इसमें जोड़ी जा सकती हैं। इससे कोड का पुन: उपयोग होता है।

पायथन में वंशानुक्रम का उदाहरण

विरासत के उपयोग को प्रदर्शित करने के लिए, आइए एक उदाहरण लेते हैं।

एक बहुभुज 3 या अधिक पक्षों के साथ एक बंद आंकड़ा है। कहते हैं, हमारे पास एक वर्ग है जिसे Polygonनिम्नानुसार परिभाषित किया गया है।

 class Polygon: def __init__(self, no_of_sides): self.n = no_of_sides self.sides = (0 for i in range(no_of_sides)) def inputSides(self): self.sides = (float(input("Enter side "+str(i+1)+" : ")) for i in range(self.n)) def dispSides(self): for i in range(self.n): print("Side",i+1,"is",self.sides(i))

इस वर्ग में पक्षों की संख्या n और प्रत्येक पक्ष के परिमाण को एक सूची के रूप में संग्रहीत करने के लिए डेटा विशेषताएँ हैं।

inputSides()विधि प्रत्येक पक्ष की भयावहता में ले जाता है और dispSides()इन पक्ष लंबाई प्रदर्शित करता है।

एक त्रिभुज 3 भुजाओं वाला बहुभुज है। तो, हम त्रिभुज नामक एक वर्ग बना सकते हैं जो बहुभुज से विरासत में मिला है। यह बहुभुज वर्ग के सभी गुण त्रिभुज वर्ग को उपलब्ध कराता है।

हमें उन्हें फिर से परिभाषित करने की आवश्यकता नहीं है (कोड पुन: प्रयोज्य)। त्रिकोण को इस प्रकार परिभाषित किया जा सकता है।

 class Triangle(Polygon): def __init__(self): Polygon.__init__(self,3) def findArea(self): a, b, c = self.sides # calculate the semi-perimeter s = (a + b + c) / 2 area = (s*(s-a)*(s-b)*(s-c)) ** 0.5 print('The area of the triangle is %0.2f' %area)

हालांकि, त्रिकोण के क्षेत्र को खोजने और मुद्रित करने के लिए कक्षा Triangleमें एक नई विधि findArea()है। यहाँ एक नमूना रन है।

 >>> t = Triangle() >>> t.inputSides() Enter side 1 : 3 Enter side 2 : 5 Enter side 3 : 4 >>> t.dispSides() Side 1 is 3.0 Side 2 is 5.0 Side 3 is 4.0 >>> t.findArea() The area of the triangle is 6.00

हम देख सकते हैं कि भले ही हमने अलग-अलग inputSides()या dispSides()कक्षा के लिए तरीकों को परिभाषित नहीं किया था Triangle, हम उनका उपयोग करने में सक्षम थे।

यदि वर्ग में ही कोई विशेषता नहीं पाई जाती है, तो खोज बेस क्लास तक जारी रहती है। यह पुनरावर्ती रूप से दोहराता है, यदि आधार वर्ग स्वयं अन्य वर्गों से प्राप्त होता है।

पायथन में विधि ओवरराइडिंग

उपरोक्त उदाहरण में, ध्यान दें कि __init__()विधि दोनों वर्गों में परिभाषित की गई थी, त्रिभुज और साथ ही बहुभुज। जब ऐसा होता है, तो व्युत्पन्न वर्ग में विधि बेस क्लास में ओवरराइड करती है। यह कहना है, __init__()त्रिभुज __init__में बहुभुज पर वरीयता प्राप्त करता है।

आमतौर पर जब एक आधार विधि को ओवरराइड करते हैं, तो हम केवल इसे बदलने के बजाय परिभाषा का विस्तार करते हैं। उसी को बेस क्लास में विधि से व्युत्पन्न वर्ग (कॉलिंग इन ) Polygon.__init__()से कॉल करके किया जा रहा है ।__init__()Triangle

एक बेहतर विकल्प बिल्ट-इन फ़ंक्शन का उपयोग करना होगा super()। तो, super().__init__(3)के बराबर है Polygon.__init__(self,3)और पसंद किया जाता है। super()पायथन में फ़ंक्शन के बारे में अधिक जानने के लिए , पायथन सुपर () फ़ंक्शन पर जाएं।

दो अंतर्निहित कार्यों isinstance()और issubclass()इनहेरिटेंस की जांच करने के लिए उपयोग किया जाता है।

फ़ंक्शन isinstance()वापस आता है Trueयदि ऑब्जेक्ट वर्ग या उससे प्राप्त अन्य वर्गों का एक उदाहरण है। पायथन में प्रत्येक वर्ग बेस क्लास से विरासत में मिला है object

 >>> isinstance(t,Triangle) True >>> isinstance(t,Polygon) True >>> isinstance(t,int) False >>> isinstance(t,object) True

इसी तरह, issubclass()वर्ग की विरासत के लिए जाँच करने के लिए उपयोग किया जाता है।

 >>> issubclass(Polygon,Triangle) False >>> issubclass(Triangle,Polygon) True >>> issubclass(bool,int) True

दिलचस्प लेख...