• Home
  • /
  • Blog
  • /
  • पायथन में ओओपी – बच्चों को 5 प्रमुख अवधारणाएं समझाई गईं

पायथन में ओओपी – बच्चों को 5 प्रमुख अवधारणाएं समझाई गईं

पायथन में ओओपी

This post is also available in: English (English) العربية (Arabic)

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

पायथन में ओओपी

पायथन एक बहु-प्रतिमान प्रोग्रामिंग भाषा है। यह भाषा विभिन्न दृष्टिकोणों को सपोर्ट करती है। प्रोग्रामिंग समस्या को हल करने के लोकप्रिय तरीकों में से एक ऑब्जेक्ट बना कर प्रोग्रामिंग करना है। इसे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) के रूप में जाना जाता है। पायथन में ओओपी की अवधारणा पुन: प्रयोज्य (री यूज़ेबल) कोड बनाने पर केंद्रित है।

इस अवधारणा को DRY (डोंट रिपीट योरसेल्फ) के रूप में जाना जाता है।

पायथन में 5 प्रमुख ओओपी अवधारणाएं

पायथन में, OOP की अवधारणा कुछ बुनियादी सिद्धांतों का पालन करती है:

  • क्लास (Class)
  • ऑब्जेक्ट (Object)
  • मेथड (Method)
  • इनहेरिटेंस (Inheritance)
  • पॉलीमॉरफिस्म (Polymorphism)

1. क्लास

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

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

पायथन क्लास के कुछ मुख्य बिंदु हैं:

  • क्लास कीवर्ड क्लास द्वारा बनाए जाते हैं।
  • विशेषताएँ (ऐट्रिब्यूट्स) वे चर (वेरिएबल्स) हैं जो एक क्लास से संबंधित होते हैं।
  • विशेषताएँ हमेशा सार्वजनिक (पब्लिक) होती हैं और डॉट (.) ऑपरेटर का उपयोग करके उन तक पहुँचा जा सकता है।

क्लास डेफिनिशन का सिंटेक्स

class ClassName:

Statement-1

Statement-2

.

.

.

Statement-n

एक क्लास को परिभाषित (डिफाइन) करना

class Dog:
	attr1 = “mammal”
	attr2 = “dog”
	def fun(self):
		print(“I’m a”, self.attr1)
		print(“I’m a”, self.attr2)

2. ऑब्जेक्ट

ऑब्जेक्ट किसी क्लास का एक इंस्टैंस होता है। क्लास एक खाका की तरह है जबकि एक ऑब्जेक्ट वास्तविक मूल्यों (एक्चुअल वैल्यूज) वाले क्लास की एक प्रति होती है। यह अब एक विचार नहीं है, यह एक वास्तविक कुत्ता है, जैसे नस्ल के कुत्ते का कुत्ता जो सात साल का है। कई अलग-अलग उदाहरण बनाने के लिए आपके पास कई कुत्ते हो सकते हैं, लेकिन एक मार्गदर्शक के रूप में क्लास के बिना, आप खो जाएंगे, यह नहीं जान पाएंगे कि किस जानकारी की आवश्यकता है।

एक ऑब्जेक्ट में निम्नलिखित चीज़ें होती हैं।

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

किसी ऑब्जेक्ट को परिभाषित (डिफाइन) करना

class Dog:
	attr1 = “mammal”
	attr2 = “dog”
	def fun(self):
		print(“I’m a”, self.attr1)
		print(“I’m a”, self.attr2)
	Rodger = Dog()
	print(Rodger.attr1)
	print(Rodger.attr2)
	Rodger.fun()

आउटपुट:

सस्तन प्राणी

कुत्ता

मैं एक स्तनपायी हूँ

मैं एक कुत्ता हूँ

The self

  • क्लास मेथड में मेथड डेफिनिशन में एक अतिरिक्त प्रथम पैरामीटर होना चाहिए। जब हम विधि को एक्टिवटे करते हैं तो हम इस पैरामीटर के लिए कोई मान नहीं देते हैं, पायथन इसे प्रदान करता है।
  • यदि हमारे पास कोई ऐसा तरीका है जिसमें कोई तर्क नहीं है, तो उसके पास अभी भी एक तर्क है और वह है सेल्फ (self)।
  • यह C++ में this पॉइंटर और जावा में this संदर्भ के समान है।

_init_ मेथड

_init_ मेथड C++ और Java में कंस्ट्रक्टर्स के समान है। कंस्ट्रक्टर्स का उपयोग ऑब्जेक्ट की स्थिति को इनिशियलाइज़ करने के लिए किया जाता है। मेथड्स की तरह, एक कंस्ट्रक्टर में भी कई स्टेटमेंट होते हैं जो किसी ऑब्जेक्ट के बनने के समय निष्पादित होते हैं। जैसे ही किसी क्लास का ऑब्जेक्ट शुरू होता है, यह एक्सेक्यूट होता है।

class Dog:
	def _init_(self, name):
		self.name = name
	def say_hi(self)
		print(‘Hello, my name is’, self.name)
d = Dog(‘Rodger’)
d.say_hi()

आउटपुट:

हैलो, मेरा नाम रॉजर है

3. मेथड

पायथन में एक मेथड कुछ हद तक एक फ़ंक्शन के समान होती है, सिवाय इसके कि यह किसी ऑब्जेक्ट/क्लास से जुड़ी होती है। पायथन में एक मेथड निम्नलिखित दो प्रमुख अंतरों को छोड़कर कार्यों के समान है:

  • मेथड का उपयोग उस वस्तु के लिए किया जाता है जिसके लिए इसे एक्टिवेट किया जाता है।
  • मेथड उस डेटा के लिए सुलभ है जो क्लास के भीतर निहित है।

पायथन में मेथड की संरचना

class class_name

def method_name():

Statement_1

Statement_2

.

.

Statement_n

class Dog:
	def _init_(self, name):
		self.name = name
	def say_hi(self):
		print(‘Hello, my name is’, self.name)
	def walk():
		print(‘I can walk)
d = Dog(‘Rodger’)
d.say_hi()
d.walk()

यहाँ, Say_hi और walk मेथड्स हैं।

आउटपुट:

हैलो, मेरा नाम रॉजर है

मैं चल सकता हूं

4. इनहेरिटेंस

इनहेरिटेंस एक क्लास की क्षमता है जो दूसरे क्लास से गुणों या विशेषताओं को प्राप्त या प्राप्त करता है। इनहेरिटेंस के लाभ हैं:

  • यह वास्तविक दुनिया के रिश्तों को अच्छी तरह से दर्शाता है।
  • यह एक कोड की पुन: प्रयोज्यता (कोड री यूज़ेबिलिटी) प्रदान करता है। हमें एक ही कोड को बार-बार नहीं लिखना पड़ता। साथ ही, यह हमें किसी क्लास को संशोधित किए बिना और अधिक सुविधाएँ जोड़ने की अनुमति देता है।
  • यह प्रकृति में सकर्मक है, जिसका अर्थ है कि यदि क्लास B को किसी अन्य क्लास A से इनहेरिटेंस में मिला है, तो क्लास के सभी सब-क्लास स्वतः ही क्लास A से इनहेरिटेंस में मिल जाएंगे।

इनहेरिटेंस में दो प्रकार के वर्ग हैं:

  • पैरेंट क्लास वह क्लास है जिससे इनहेरिटेंस में मिला है, जिसे बेस क्लास भी कहा जाता है।
  • चाइल्ड क्लास वह क्लास है जो किसी अन्य क्लास से प्राप्त होता है, जिसे व्युत्पन्न (डिराइव्ड) क्लास भी कहा जाता है।

एक पैरेंट क्लास बनाएं

कोई भी क्लास पैरेंट क्लास हो सकता है, इसलिए सिंटैक्स किसी अन्य क्लास को बनाने जैसा ही है।

class Person:
	def _init_ (self, fname, lname):
		self.fname = fname
		self.name = lname
	def printname(self):
		print(self.firstname, self.lastname)
x = Person(“Kishore”, “Kumar)
x.printname()

आउटपुट:

किशोर कुमार

चाइल्ड क्लास बनाएं

एक ऐसा क्लास बनाने के लिए जो किसी अन्य क्लास से कार्यक्षमता प्राप्त करता है, चाइल्ड क्लास बनाते समय पैरेंट क्लास को एक पैरामीटर के रूप में भेजें।

class Student(Person):
	pass

नोट: जब आप क्लास में कोई अन्य गुण (ऐट्रिब्यूट्स) या विधियाँ (मेथड्स) नहीं जोड़ना चाहते हैं तो pass कीवर्ड का उपयोग करें।

जब हम एक ऑब्जेक्ट बनाने के लिए स्टूडेंट क्लास का उपयोग करते हैं, और फिर printname मेथड को निष्पादित करते हैं (चूंकि क्लास स्टूडेंट को पर्सन क्लास के गुण / ऐट्रिब्यूट्स इनहेरिटेंस में मिलते हैं)।

x = Student(“Ravi”, “Sharma”)
x.printname()

आउटपुट:

रवि शर्मा

चाइल्ड क्लास में _init_() फ़ंक्शन जोड़ना

हम चाइल्ड क्लास (pass कीवर्ड के बजाय) में _init_() फ़ंक्शन जोड़ सकते हैं।

_init_() फ़ंक्शन को हर बार नई ऑब्जेक्ट बनाने के लिए क्लास का उपयोग करने पर स्वचालित रूप से कॉल किया जाता है।

class Student(Person):
	def _init_(self, fname, lname):
	def funtion_1():
	.
	.
	def function_n():

जब आप _init_() फ़ंक्शन जोड़ते हैं, तो चाइल्ड क्लास अब पैरेंट के क्लास _init_() फ़ंक्शन को इनहेरिट नहीं करेगा। पैरेंट के _init_() फ़ंक्शन की इनहेरिटेंस को बनाए रखने के लिए, पैरेंट के _init_() फ़ंक्शन में कॉल जोड़ें।

class Student(Person):
	def _init_(self, fname, name):
		Person._init_(self, fname, name)

Super() फंक्शन

पायथन में एक super() फ़ंक्शन भी है जो चाइल्ड क्लास को उसके पैरेंट से सभी मेथड्स और गुणों (ऐट्रिब्यूट्स) को इनहेरिटेंस में देगा।

class Student(Person):
	def _init_(self, fname, name):
		super()._init_(fname, name)

super() फ़ंक्शन का उपयोग करके, आपको पैरेंट क्लास के नाम का उपयोग करने की आवश्यकता नहीं है, यह स्वचालित रूप से अपने पैरेंट से मेथड्स और गुणों (ऐट्रिब्यूट्स) को प्राप्त करेगा। आप चाइल्ड क्लास में अतिरिक्त गुण/विशेषताएँ जोड़ सकते हैं।

निम्नलिखित कोड स्टूडेंट क्लास में graduationyear नामक एक प्रॉपर्टी जोड़ देगा:

class Student(Person):
	def _init_(self, fname, lname):
		super()._init_(fname, name)
		self.graduationyear = 2019

5. पॉलीमॉरफिस्म

पॉलीमॉरफिस्म शब्द का अर्थ है अनेक रूपों का होना। प्रोग्रामिंग में, पॉलीमॉरफिस्म का अर्थ समान फ़ंक्शन नाम (लेकिन विभिन्न गतिविधियों का प्रदर्शन करना) है। पायथन में पॉलीमॉरफिस्म को निम्नलिखित में से किसी भी तरीके से लागू किया जा सकता है:

  • क्लास मेथड्स के साथ पॉलीमॉरफिस्म
  • इनहेरिटेंस के साथ पॉलीमॉरफिस्म

क्लास मेथड्स के साथ पॉलीमॉरफिस्म

नीचे दिया गया कोड दिखाता है कि कैसे पायथन दो अलग-अलग क्लास प्रकारों का उपयोग उसी तरह कर सकता है। हम एक for लूप के लिए बनाते हैं जो वस्तुओं के एक टपल के माध्यम से पुनरावृत्त होता है। फिर प्रत्येक ऑब्जेक्ट किस क्लास के प्रकार के बारे में चिंतित किए बिना मेथड्स को कॉल करें। हम मान के चलते हैं कि ये मेथड्स वास्तव में प्रत्येक क्लास में मौजूद हैं।

class India():
	def continent(self):
		print(“India is in Asia.”)
	def capital(self):
		print(“Capital of India is New Delhi.”)
	def language(self):
		print(“Hindi is the most widely spoken language in India.”)
class USA():
	def continent(self):
		print(“The USA is in North America.”)
	def capital(self):
		print(“Capital of the USA is Washington DC.”)
	def language(self):
		print(“English is the most widely spoken language in the USA.”)
obj_ind = India()
obj_usa = USA()
For country in(obj_ind, obj_usa):
	country.continent()
country.capital()
country.language()

आउटपुट:

India is in Asia.

Capital of India is New Delhi.

Hindi is the most widely spoken language in India.

The USA is in North America.

Capital of the USA is Washington DC.

English is the most widely spoken language in the USA.

Polymorphism with Inheritance

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

निम्नलिखित कोड अवधारणा की व्याख्या करता है:

class Bird:
	def intro(self):
		printf(“There are many types of birds.”)
	def flight(self):
		print(“Most of the birds can fly but some cannot.”)
class sparrow(Bird):
	def flight(self):
		print(“Sparrows can fly.”)
class ostrich(Bird):
	def flight(self):
		print(“Ostrich cannot fly.”)
obj_bird = Bird()
obj_spr = sparrow()
obj_ost = ostrich()
obj_bird.intro()
obj_bird.flight()
obj_spr.intro()
obj_spr.flight()
obj_ost.intro()
obj_ost.flight()

आउटपुट:

There are many types of birds.

Most of the birds can fly but some cannot.

There are many types of birds.

Sparrows can fly.

There are many types of birds.

Ostrich cannot fly.

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
>