इस ट्यूटोरियल में, आप पायथन ऑब्जेक्ट्स और कक्षाओं की मुख्य कार्यक्षमता के बारे में जानेंगे। आप सीखेंगे कि एक वर्ग क्या है, इसे कैसे बनाएं और अपने कार्यक्रम में इसका उपयोग करें।
वीडियो: अजगर कक्षाएं और ऑब्जेक्ट्स
पायथन ऑब्जेक्ट्स और क्लासेस
पायथन एक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज है। प्रक्रिया उन्मुख प्रोग्रामिंग के विपरीत, जहां मुख्य जोर कार्यों पर है, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग वस्तुओं पर जोर देता है।
ऑब्जेक्ट केवल डेटा (चर) और विधियों (फ़ंक्शन) का एक संग्रह है जो उन डेटा पर कार्य करता है। इसी प्रकार, एक वर्ग उस वस्तु का एक खाका होता है।
हम एक घर के एक स्केच (प्रोटोटाइप) के रूप में कक्षा के बारे में सोच सकते हैं। इसमें फर्श, दरवाजे, खिड़कियां आदि के बारे में सभी विवरण शामिल हैं। इन विवरणों के आधार पर हम घर का निर्माण करते हैं। घर की वस्तु है।
जैसा कि एक घर के खाके से कई घर बनाए जा सकते हैं, हम एक वर्ग से कई ऑब्जेक्ट बना सकते हैं। एक ऑब्जेक्ट को एक वर्ग का एक उदाहरण भी कहा जाता है और इस ऑब्जेक्ट को बनाने की प्रक्रिया को इंस्टेंटेशन कहा जाता है ।
पायथन में एक कक्षा को परिभाषित करना
जैसे फ़ंक्शन परिभाषाएँ पायथन में डिफ कीवर्ड के साथ शुरू होती हैं, क्लास की परिभाषाएं क्लास कीवर्ड से शुरू होती हैं।
कक्षा के अंदर के पहले तार को डॉकस्ट्रिंग कहा जाता है और इसमें कक्षा के बारे में एक संक्षिप्त विवरण होता है। हालांकि अनिवार्य नहीं है, यह अत्यधिक अनुशंसित है।
यहाँ एक साधारण वर्ग की परिभाषा दी गई है।
class MyNewClass: '''This is a docstring. I have created a new class''' pass
एक वर्ग एक नया स्थानीय नामस्थान बनाता है, जहाँ उसकी सभी विशेषताओं को परिभाषित किया जाता है। विशेषताएँ डेटा या फ़ंक्शंस हो सकती हैं।
इसमें विशेष विशेषताएं भी हैं जो डबल अंडरस्कोर से शुरू होती हैं __
। उदाहरण के लिए, __doc__
हमें उस कक्षा का डॉकस्ट्रिंग प्रदान करता है।
जैसे ही हम एक वर्ग को परिभाषित करते हैं, उसी नाम से एक नई कक्षा वस्तु बनाई जाती है। यह क्लास ऑब्जेक्ट हमें विभिन्न विशेषताओं के साथ-साथ उस क्लास की नई वस्तुओं को तुरंत एक्सेस करने की अनुमति देता है।
class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)
आउटपुट
10 यह एक व्यक्ति वर्ग है
पायथन में एक वस्तु बनाना
हमने देखा कि विभिन्न विशेषताओं को एक्सेस करने के लिए क्लास ऑब्जेक्ट का उपयोग किया जा सकता है।
इसका उपयोग उस वर्ग के नए ऑब्जेक्ट इंस्टेंस (तात्कालिकता) बनाने के लिए भी किया जा सकता है। ऑब्जेक्ट बनाने की प्रक्रिया एक फ़ंक्शन कॉल के समान है।
>>> harry = Person()
यह harry नाम का एक नया ऑब्जेक्ट इंस्टेंस बनाएगा। हम ऑब्जेक्ट नाम उपसर्ग का उपयोग करके वस्तुओं की विशेषताओं तक पहुंच सकते हैं।
विशेषताएँ डेटा या विधि हो सकती हैं। किसी वस्तु के तरीके उस वर्ग के संगत कार्य हैं।
यह कहने का मतलब है, क्योंकि Person.greet
एक फ़ंक्शन ऑब्जेक्ट (वर्ग की विशेषता) है, Person.greet
एक विधि ऑब्जेक्ट होगी।
class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output: print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet()
आउटपुट
नमस्कार
आपने self
कक्षा के अंदर फ़ंक्शन परिभाषा में पैरामीटर को देखा हो सकता है लेकिन हमने विधि को harry.greet()
बिना किसी तर्क के कहा है। यह अभी भी काम किया।
ऐसा इसलिए है, क्योंकि जब भी कोई वस्तु अपने तरीके को बुलाती है, तो वस्तु को पहले तर्क के रूप में पारित किया जाता है। तो, में harry.greet()
अनुवाद करता है Person.greet(harry)
।
सामान्य तौर पर, n तर्क की सूची के साथ एक विधि को कॉल करना एक तर्क सूची के साथ संबंधित फ़ंक्शन को कॉल करने के बराबर है जो पहले तर्क से पहले विधि के ऑब्जेक्ट को सम्मिलित करके बनाया जाता है।
इन कारणों से, कक्षा में फ़ंक्शन का पहला तर्क ऑब्जेक्ट ही होना चाहिए। इसे पारंपरिक रूप से स्व कहा जाता है। इसे अन्यथा नाम दिया जा सकता है लेकिन हम अधिवेशन का पालन करने की अत्यधिक सलाह देते हैं।
अब आपको क्लास ऑब्जेक्ट, इंस्टेंस ऑब्जेक्ट, फंक्शन ऑब्जेक्ट, मेथड ऑब्जेक्ट और उनके अंतर से परिचित होना चाहिए।
पायथन में कंस्ट्रक्टर्स
डबल अंडरस्कोर से शुरू होने वाले क्लास फ़ंक्शंस __
को विशेष फ़ंक्शन कहा जाता है क्योंकि उनके विशेष अर्थ होते हैं।
एक विशेष रुचि का __init__()
कार्य है। जब भी उस वर्ग की एक नई वस्तु को त्वरित किया जाता है, तो यह विशेष कार्य कहलाता है।
This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.
class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)
Output
2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'
In the above example, we defined a new class to represent complex numbers. It has two functions, __init__()
to initialize the variables (defaults to zero) and get_data()
to display the number properly.
An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.
Deleting Attributes and Objects
del
कथन का उपयोग करके किसी भी वस्तु की किसी भी विशेषता को कभी भी हटाया जा सकता है । आउटपुट देखने के लिए पायथन शेल पर निम्नलिखित को आज़माएं।
>>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'
हम डेल स्टेटमेंट का उपयोग करके ऑब्जेक्ट को स्वयं हटा भी सकते हैं।
>>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined
दरअसल, यह उससे कहीं अधिक जटिल है। जब हम करते हैं c1 = ComplexNumber(1,3)
, तो एक नया उदाहरण ऑब्जेक्ट स्मृति में बनाया जाता है और नाम c1 इसके साथ बांधता है।
कमांड पर del c1
, यह बाइंडिंग हटा दी जाती है और संबंधित नामस्थान से c1 नाम हटा दिया जाता है। हालाँकि यह ऑब्जेक्ट स्मृति में मौजूद है और यदि कोई अन्य नाम इसके लिए बाध्य नहीं है, तो यह बाद में स्वचालित रूप से नष्ट हो जाता है।
पायथन में अप्रतिबंधित वस्तुओं के इस स्वचालित विनाश को कचरा संग्रह भी कहा जाता है।
