इनहेरिटेंस ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) का एक आधारशिला है, जो मौजूदा क्लासेस (पैरेंट या सुपरक्लासेस) के आधार पर नई क्लासेस (चाइल्ड या सबक्लासेस) के निर्माण को सक्षम बनाता है। यह कोड पुन: प्रयोज्यता को बढ़ावा देता है, अतिरेक को कम करता है, और एक अच्छी तरह से संरचित कोडबेस को बढ़ावा देता है। यह ट्यूटोरियल पायथन के इनहेरिटेंस मैकेनिज्म में तल्लीन करता है, विभिन्न प्रकारों की खोज करता है और व्यावहारिक अनुप्रयोगों का प्रदर्शन करता है।
विषय-सूची
मेथड ओवरराइडिंग
मेथड ओवरराइडिंग एक सबक्लास को अपने सुपरक्लास से विरासत में मिले मेथड के लिए एक विशेष कार्यान्वयन प्रदान करने की अनुमति देता है। यह सुपरक्लास को बदले बिना विरासत में मिली व्यवहार को अनुकूलित करता है।
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("Generic animal sound")
class Dog(Animal):
def speak(self):
print("Woof!")
class Cat(Animal):
def speak(self):
print("Meow!")
animal = Animal("Generic Animal")
animal.speak() # Output: Generic animal sound
dog = Dog("Buddy")
dog.speak() # Output: Woof!
cat = Cat("Whiskers")
cat.speak() # Output: Meow!
super()
फ़ंक्शन सुपरक्लास के मेथड तक पहुँच की अनुमति देता है, जिससे सुपरक्लास और सबक्लास दोनों व्यवहारों का उपयोग किया जा सकता है।
class Dog(Animal):
def speak(self):
super().speak()
print("Woof! (from Dog class)")
मल्टीपल इनहेरिटेंस
पायथन मल्टीपल इनहेरिटेंस को सपोर्ट करता है, जहाँ एक क्लास कई पैरेंट क्लासेस से इनहेरिट करता है, जिससे कार्यक्षमताएँ संयोजित होती हैं। हालाँकि, मेथड नाम संघर्षों (“डायमंड प्रॉब्लम”) के प्रबंधन के लिए सावधानीपूर्वक विचार की आवश्यकता है। C3 रैखिकीकरण का उपयोग करके पायथन का मेथड रेसोल्यूशन ऑर्डर (MRO) पूर्वानुमेय संघर्ष समाधान सुनिश्चित करता है। आप ClassName.__mro__
का उपयोग करके MRO का निरीक्षण कर सकते हैं।
class Flyer:
def move(self):
print("Flying!")
class Swimmer:
def move(self):
print("Swimming!")
class FlyingFish(Flyer, Swimmer):
pass
flying_fish = FlyingFish()
print(FlyingFish.__mro__) #Check MRO
flying_fish.move() # Output: Flying! (Flyer's move is called first due to MRO)
मल्टीलेवल इनहेरिटेंस
मल्टीलेवल इनहेरिटेंस एक पदानुक्रम बनाता है जहाँ एक सबक्लास दूसरे सबक्लास से इनहेरिट करता है, जो स्वयं एक सुपरक्लास से इनहेरिट करता है। यह बढ़ते विशेषज्ञता के साथ मौजूदा क्लासेस पर निर्माण करता है।
class Animal:
def __init__(self, name):
self.name = name
class Mammal(Animal):
def __init__(self, name, fur_color):
super().__init__(name)
self.fur_color = fur_color
class Dog(Mammal):
def __init__(self, name, fur_color, breed):
super().__init__(name, fur_color)
self.breed = breed
dog = Dog("Buddy", "Brown", "Golden Retriever")
print(f"{dog.name} is a {dog.breed} with {dog.fur_color} fur.")
# Output: Buddy is a Golden Retriever with Brown fur.
व्यावहारिक उदाहरण: एक आकार पदानुक्रम
आइए एक व्यावहारिक उदाहरण के साथ इनहेरिटेंस को स्पष्ट करें: आकृतियों का एक पदानुक्रम। हम एक आधार Shape
क्लास से शुरू करेंगे और इससे Circle
और Rectangle
क्लासेस प्राप्त करेंगे।
import math
class Shape:
def __init__(self, name):
self.name = name
def area(self):
raise NotImplementedError("Area method must be implemented in subclasses")
class Circle(Shape):
def __init__(self, name, radius):
super().__init__(name)
self.radius = radius
def area(self):
return math.pi * self.radius**2
class Rectangle(Shape):
def __init__(self, name, width, height):
super().__init__(name)
self.width = width
self.height = height
def area(self):
return self.width * self.height
circle = Circle("Circle", 5)
rectangle = Rectangle("Rectangle", 4, 6)
print(f"The area of the {circle.name} is: {circle.area()}")
print(f"The area of the {rectangle.name} is: {rectangle.area()}")
यह उदाहरण दर्शाता है कि कैसे इनहेरिटेंस कोड संगठन और पुन: प्रयोज्यता को कैसे सुगम बनाता है। area
मेथड बेस क्लास में परिभाषित किया गया है, जिससे सबक्लासेस को अपनी विशिष्ट क्षेत्र गणनाओं को लागू करने के लिए मजबूर किया जाता है।
यह ट्यूटोरियल पायथन में क्लास इनहेरिटेंस का एक व्यापक परिचय प्रदान करता है। एब्स्ट्रेक्ट बेस क्लासेस, इंटरफेस और डिज़ाइन पैटर्न का आगे अन्वेषण जो इनहेरिटेंस का लाभ उठाते हैं, आपकी OOP दक्षता में महत्वपूर्ण रूप से वृद्धि करेंगे।