inheritance in python in Hindi
पाइथन इनहेरिटेंस
पाइथन इनहेरिटेंस की रोमांचक दुनिया में आपका स्वागत है! इनहेरिटेंस object-oriented programming की एक शक्तिशाली विशेषता है जो आपको मौजूदा के आधार पर नई क्लास्सेस बनाने की अनुमति देता है, इस प्रकार कोड के पुन: उपयोग को बढ़ावा देता है और अतिरेक को कम करता है। इनहेरिटेंस क्लासेज के बीच संबंध बनाने के बारे में है, और पायथन ऐसा करने के लिए उपकरणों का एक समृद्ध सेट प्रदान करता है।
पायथन डेवलपर के रूप में, आप शायद पहले से ही ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के लाभों से परिचित हैं, जैसे कि encapsulation, polymorphism, और abstraction । inheritance इन अवधारणाओं पर आपको एक नई क्लास को परिभाषित करने की अनुमति देता है जो किसी मौजूदा क्लास की सभी विशेषताओं और विधियों को प्राप्त करता है, और फिर इसे अपनी आवश्यकताओं के अनुरूप अनुकूलित करता है। इसका मतलब है कि आप एक ही कोड को बार-बार लिखे बिना आसानी से जटिल एप्लिकेशन (complex applications) बना सकते हैं।
लेकिन इनहेरिटेंस केवल एक पावरफुल टूल नहीं है, यह एक आकर्षक भी है। इनहेरिटेंस के साथ, आप वस्तुओं के बीच वास्तविक दुनिया के रिश्तों को मॉडल कर सकते हैं, जैसे कार और ट्रक, या पक्षी और पेंगुइन के बीच संबंध। आप abstract classes भी बना सकते हैं जो संबंधित classes के समूह के लिए सामान्य व्यवहार और विशेषताओं को परिभाषित करते हैं। तो चाहे आप एक अनुभवी पायथन डेवलपर हों या शुरुआत करने वाले शुरुआती, विरासत निश्चित रूप से कुछ ऐसा है जिसके बारे में आप और जानना चाहेंगे।
नोट :
इनहेरिटेंस हमें एक क्लास को परिभाषित करने की अनुमति देता है जो किसी अन्य क्लास से सभी मेथोड्स और प्रॉपर्टीज को प्राप्त करता है। पैरेंट क्लास वह क्लास है जिससे इन्हेरिट्स में मिला है, जिसे derived class भी कहा जाता है। चाइल्ड क्लास वह क्लास है जो किसी अन्य क्लास से प्राप्त होता है,जिसे derived class भी कहा जाता है।
पायथन प्रोग्रामिंग में मुख्य इनहेरिटेंस के प्रकार
इनहेरिटेंस वस्तु-उन्मुख प्रोग्रामिंग (object-oriented programming) की एक प्रमुख विशेषता है जो आपको मौजूदा classes के आधार पर नई classes बनाने की अनुमति देता है, इस प्रकार कोड के पुन: उपयोग को बढ़ावा देता है और अतिरेक को कम करता है। (reuse and minimizing redundancy) पायथन में, चार मुख्य प्रकार की इनहेरिटेंस हैं: single, multiple, multi-level, and hierarchical। प्रत्येक प्रकार का अपना उपयोग मामला (use case) और विशेषताएं (characteristics)होती हैं, और प्रभावी और कुशल कोड लिखने के लिए उन्हें समझना महत्वपूर्ण है।
Single inheritance
Single inheritance,इनहेरिटेंस का सबसे सामान्य प्रकार है। इस मॉडल में, एक चाइल्ड क्लास सिंगल पैरेंट क्लास से इनहेरिट होती है। चाइल्ड क्लास तब अपनी विशेषताओं और विधियों को जोड़ सकता है, या पैरेंट क्लास को ओवरराइड कर सकता है। यहाँ Single inheritance का एक उदाहरण दिया गया है:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
return "Woof!"
dog = Dog("Fido")
print(dog.name) # Output: "Fido"
print(dog.make_sound()) # Output: "Woof!"
Multiple Inheritance
मल्टीपल इनहेरिटेंस एक अधिक जटिल प्रकार (complex type)का इनहेरिटेंस है जहाँ एक चाइल्ड क्लास दो या दो से अधिक पैरेंट क्लासेस से एट्रीब्यूट्स और मेथड्स इनहेरिट कर सकता है। इसका उपयोग अक्सर एक नया क्लास बनाने के लिए किया जाता है जो कई वर्गों की विशेषताओं को जोड़ता है। यहाँ एक उदाहरण है:
class Flyer:
def fly(self):
print("I'm flying!")
class Swimmer:
def swim(self):
print("I'm swimming!")
class FlyingFish(Flyer, Swimmer):
pass
fish = FlyingFish()
fish.fly() # Output: "I'm flying!"
fish.swim() # Output: "I'm swimming!"
Multilevel Inheritance
मल्टी-लेवल इनहेरिटेंस तब होता है जब एक चाइल्ड क्लास एक पैरेंट क्लास से इनहेरिट करता है, जो बदले में दूसरे पैरेंट क्लास से इनहेरिट करता है। यह क्लास्सेस का एक पदानुक्रम बनाता है। यहाँ एक उदाहरण है:
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("This animal makes a sound.")
class Mammal(Animal):
def give_birth(self):
print("I'm giving birth to a mammal.")
class Cat(Mammal):
def meow(self):
print("Meow!")
cat = Cat("Fluffy")
print(cat.name) # Output: "Fluffy"
cat.make_sound() # Output: "This animal makes a sound."
cat.give_birth() # Output: "I'm giving birth to a mammal."
cat.meow() # Output: "Meow!"
Hierarchical inheritance
Hierarchical inheritance तब होता है जब कई चाइल्ड क्लासेज , सिंगल पैरेंट क्लास से प्राप्त होते हैं। इसका उपयोग अक्सर संबंधित क्लासेज का समूह बनाने के लिए किया जाता है। यहाँ एक उदाहरण है:
class Vehicle:
def __init__(self, name):
self.name = name
def start_engine(self):
print("Starting the engine.")
class Car(Vehicle):
def drive(self):
print("Driving the car.")
class Truck(Vehicle):
def haul(self):
print("Hauling a load.")
class SUV(Car):
def offroad(self):
print("Going off-road in the SUV.")
class Pickup(Truck):
def tow(self):
print("Towing a trailer with the pickup.")
suv = SUV("Explorer")
print(suv.name) # Output: "Explorer"
suv.start_engine() # Output: "Starting the engine."
suv.drive() # Output: "Driving the car."
suv.offroad() # Output: "Going off-road in the SUV."
पायथन में इनहेरिटेंस का उपयोग करने के लिए सर्वोत्तम अभ्यास केसे करे |
इनहेरिटेंस object-oriented programming की एक शक्तिशाली विशेषता है जो आपको पायथन में क्लीन और कुशल कोड (efficient code)लिखने में मदद कर सकती है। हालांकि, इसका बुद्धिमानी से उपयोग करना और संभावित नुकसान से बचने के लिए सर्वोत्तम प्रथाओं का पालन करना (important to follow best practices) महत्वपूर्ण है। पायथन में इनहेरिटेंस का उपयोग करते समय कुछ सर्वोत्तम अभ्यासों को ध्यान में रखना चाहिए:
इनहेरिटेंस का संयम से उपयोग करें:
इनहेरिटेंस आपके कोड को अधिक जटिल और बनाए रखने में कठिन बना सकता है। इनहेरिटेंस का उपयोग सिर्फ इसलिए न करें क्योंकि यह उपलब्ध है, इसका उपयोग तभी करें जब यह समझ में आता है।
इनहेरिटेंस पदानुक्रम उथला रखें (hierarchies shallow):
डीप इनहेरिटेंस हिएरर्चिएस आपके कोड को समझने और डिबग करने में कठिन बना सकता है। अपने इनहेरिटेंस हिएरर्चिएस को यथासंभव उथला रखने का प्रयास करें।
पैरेंट क्लास मेथड को कॉल करने के लिए सुपर () फ़ंक्शन का उपयोग करें:
चाइल्ड क्लास में किसी मेथड को ओवरराइड करते समय, पैरेंट क्लास मेथड को कॉल करने के लिए सुपर () फ़ंक्शन का उपयोग करें। यह सुनिश्चित करता है कि सभी मूल वर्ग विधियों (parent class methods)को ठीक से कहा जाता है और errors से बचने में मदद करता है।
abstract classes और इंटरफेस का उपयोग करें:
abstract classes और इंटरफेस आपको classes के समूह के लिए एक सामान्य इंटरफ़ेस परिभाषित करने में मदद कर सकते हैं। यह आपके कोड को अधिक लचीला और बनाए रखने में आसान बना सकता है।
यहाँ एक उदाहरण दिया गया है जो इनमें से कुछ सर्वोत्तम अभ्यासों को प्रदर्शित करता है:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def make_sound(self):
pass
class Dog(Animal):
def make_sound(self):
print("Woof!")
class Cat(Animal):
def make_sound(self):
print("Meow!")
class Pet:
def __init__(self, name):
self.name = name
class DogPet(Pet, Dog):
def __init__(self, name, breed):
Pet.__init__(self, name)
Dog.__init__(self, breed)
dog_pet = DogPet("Fido", "Labrador")
dog_pet.make_sound() # Output: "Woof!"
इस उदाहरण में, हम कुत्ते और बिल्ली क्लासेज के लिए एक सामान्य इंटरफ़ेस को परिभाषित करने के लिए एक अमूर्त पशु वर्ग (abstract Animal class) का उपयोग करते हैं। हम पालतू जानवरों से निपटने वाली क्लासेज के एक अलग इनहेरिटेंस को परिभाषित करने के लिए पालतू वर्ग (Pet class)का भी उपयोग करते हैं।
फिर हम एक डॉगपेट क्लास को परिभाषित करते हैं जो पेट और डॉग दोनों क्लासेज की कार्यक्षमता को जोड़ती है। हम पेट और डॉग कंस्ट्रक्टर को ठीक से कॉल करने के लिए सुपर () फ़ंक्शन का उपयोग करते हैं। इसका परिणाम एक साफ और लचीली डिजाइन में होता है जो चिंताओं को अलग करता है और अनावश्यक जटिलता से बचाता है।