विषयसूची[लुकाउनुहोस्][देखाउनु]
यस व्याख्यानमा, हामी पाइथनमा क्लास, कन्स्ट्रक्टर र इनहेरिटेन्स बारे जान्नेछौं।
यी अवधारणाहरू एक ठूलो कार्यक्रममा साँच्चै महत्त्वपूर्ण छन् जहाँ विभिन्न प्रकारहरू परिभाषित गर्न आवश्यक छ।
कक्षा
कक्षाहरू प्रोग्रामिङमा आवश्यक छन् र तिनीहरू पाइथनका लागि विशिष्ट छैनन्। अरु धेरै प्रोग्रामिंग भाषाहरू कक्षाहरूको धारणालाई समर्थन गर्दछ। हामी नयाँ डेटा प्रकारहरू परिभाषित गर्न कक्षाहरू प्रयोग गर्छौं।
अहिलेसम्म, हामीले पाइथनमा आधारभूत डेटा प्रकारहरू जस्तै नम्बरहरू, स्ट्रिङहरू र बुलियनहरू बारे सिकेका छौं। यी पाइथनमा आधारभूत वा साधारण डेटा प्रकारहरू हुन्। हामीले सूची र शब्दकोश जस्ता जटिल डेटा प्रकारहरू पनि देखेका छौं।
यद्यपि यी प्रकारहरू अत्यन्त उपयोगी छन्, तिनीहरू सधैं जटिल अवधारणाहरू मोडेल गर्न प्रयोग गर्न सकिँदैन। उदाहरणका लागि, बिन्दु, वा किनमेल कार्टको विचारको बारेमा सोच्नुहोस्। किनमेल कार्ट बुलियन वा सूची होइन। यो फरक प्रकारको डाटा हो। त्यसैले हामी वास्तविक अवधारणाहरू मोडेल गर्न नयाँ प्रकारहरू परिभाषित गर्न कक्षाहरू प्रयोग गर्न सक्छौं।
अब, पोइन्ट भनिने नयाँ डाटा प्रकार परिभाषित गरौं। यो नयाँ प्रकार हामीले पहिले जाँच गरे जस्तै विधिहरू हुन गइरहेको छ।
तपाईंले यो कसरी गर्नुहुनेछ:
हामी "class" कुञ्जी शब्द प्रयोग गरेर कक्षा परिभाषित गरेर सुरु गर्छौं र त्यस पछि हामी हाम्रो कक्षालाई नाम दिन्छौं।
class Point
अब, मैले यहाँ प्रयोग गरेको नामकरण कन्भेन्सनलाई हेर्नुहोस्। मैले यहाँ पहिलो अक्षरलाई क्यापिटल गरेको छु, यसलाई हामी पास्कल नामकरण कन्भेन्सन भन्छौं। यो कन्भेन्सन हामीले हाम्रा चरहरू र प्रकार्यहरू नामकरण गर्न प्रयोग गर्ने भन्दा फरक छ जसको लागि हामी सधैं सानो अक्षरहरू प्रयोग गर्छौं र अन्डरस्कोर प्रयोग गरेर धेरै शब्दहरू छुट्याउँछौं। तर कक्षाहरू नामकरण गर्दा, हामी धेरै शब्दहरू अलग गर्नको लागि अन्डरस्कोर प्रयोग गर्दैनौं, हामी प्रत्येक शब्दको पहिलो अक्षरलाई क्यापिटलाइज गर्छौं।
हाम्रो वर्ग परिभाषित गरेपछि, एक कोलोन प्रयोग गरिन्छ जसको मतलब अब ब्लक परिभाषित गरिएको छ।
class Point:
def move (self):
यस ब्लकमा, हामी बिन्दुहरूसँग सम्बन्धित सबै प्रकार्य वा विधिहरू परिभाषित गर्न सक्छौं। उदाहरण को लागी, हामी बिन्दु सार्न को लागी "चाल" भनिने प्रकार्य परिभाषित गर्न सक्छौं। ध्यान दिनुहोस् कि हामीले खुला कोष्ठक टाइप गर्ने बित्तिकै, PyCharm स्वचालित रूपमा यहाँ "self" थप्छ। यो एक विशेष कुञ्जी शब्द हो र मलाई छिट्टै यसमा फर्कन दिनुहोस्। टर्मिनलमा "move" प्रिन्ट गरौं।
print("move")
"ड्र" जस्तै अर्को विधि परिभाषित गरौं र यसलाई टर्मिनलमा छापौं।
def draw(self):
print("draw")
हामीले हाम्रो "बिन्दु" वर्गको परिभाषा पूरा गरिसकेका छौं। यो नयाँ प्रकारको साथ, हामी नयाँ वस्तुहरू सिर्जना गर्न सक्छौं। एउटा वर्गले ब्लुप्रिन्ट वा वस्तुहरू सिर्जना गर्नका लागि टेम्प्लेटलाई मात्र परिभाषित गर्दछ जुन त्यो खाकामा आधारित वास्तविक उदाहरणहरू हुन्। वस्तु बनाउनको लागि, हामी हाम्रो कक्षाको नाम टाइप गर्छौं र त्यसपछि यसलाई फंक्शन जस्तै कल गर्छौं। यसले नयाँ वस्तु सिर्जना गर्छ र त्यसपछि यसलाई फर्काउँछ। त्यसपछि हामी त्यो वस्तुलाई चरमा भण्डार गर्न सक्छौं। मलाई देखाउन देउ:
यहाँ हामीले "point1" परिभाषित गरेका छौं जुन एक त्रि-आयामी बिन्दु हो। तपाईले देख्न सक्नुहुन्छ, हामी टर्मिनलमा व्यक्तिगत निर्देशांकहरू छाप्न सक्छौं।
हामी यस बिन्दुसँग "ड्र" र "मूभ" दुई विधिहरू प्रयोग गर्न सक्छौं।
त्यसैले रिक्याप गर्न, हामी नयाँ प्रकारहरू परिभाषित गर्न कक्षाहरू प्रयोग गर्दछौं र यी प्रकारहरूमा हामीले वर्गको मुख्य भागमा परिभाषित गर्ने विधिहरू हुन सक्छ। कक्षाहरूमा विशेषताहरू हुन सक्छन् जुन हामीले हाम्रा कार्यक्रमहरूमा जहाँ पनि सेट गर्न सक्छौं।
कन्स्ट्रक्टरहरू
अहिलेसम्म, हामीले कक्षाहरू प्रयोग गरेर नयाँ प्रकारहरू कसरी सिर्जना गर्ने भनेर सिकेका छौं। अब यो कार्यान्वयनमा सानो समस्या छ। हामी कक्षाहरू प्रयोग गरेर x वा y समन्वय बिना बिन्दु वस्तु सिर्जना गर्न सक्छौं र त्यो आदर्श होइन। मलाई देखाउन देउ।
हामीले x समन्वय सेट गर्नु अघि एउटा बिन्दु सिर्जना गरौं र प्रिन्ट गरौं। हाम्रो कार्यक्रम चलाउँदा यस्तो विशेषता त्रुटिमा परिणाम:
यसको मतलब बिन्दु वस्तुमा x भनिने कुनै विशेषता छैन। अब समस्या यो हो कि x वा y समन्वय बिना बिन्दु वस्तु हुन सम्भव छ। यसले कुनै अर्थ राख्दैन किनकि जब हामी कुनै बिन्दुको बारेमा कुरा गर्छौं, हामीले त्यो बिन्दु कहाँ छ भनेर जान्न आवश्यक छ। यो समस्या समाधान गर्न, हामी एक कन्स्ट्रक्टर प्रयोग गर्दछौं। कन्स्ट्रक्टर एक प्रकार्य हो जुन वस्तु सिर्जना गर्दा कल हुन्छ।
यहाँ हामी कसरी कन्स्ट्रक्टर प्रयोग गर्छौं। पहिले, माथिको कार्यक्रममा x र y समन्वय मानहरू पास गरौं।
point = Point(10, 20)
print(point.x)
अब, हामीले यस क्लासमा कन्स्ट्रक्टर भनिने एउटा विशेष विधि थप्नु पर्छ। यसको वाक्य रचना यस्तो छ:
def __init__(self, x, y):
init
प्रारम्भिक लागि छोटो छ, र यो प्रकार्य वा विधि हो जुन नयाँ बिन्दु वस्तु सिर्जना हुँदा कल हुन्छ। x र y ठीक पछि थपिएको छ self
दुई अतिरिक्त प्यारामिटरहरू थप्न।
त्यस पछि, हामीले x र y लाई पारित मानहरू जस्तै 10 र 20 मा म्याप गर्नुपर्छ
self.x = x
self.y = y
हामी प्रयोग गर्दछौं self
हालको वस्तुलाई सन्दर्भ गर्न र त्यसपछि हामीले प्रकार्य "x" मा पास गरिएको x तर्कमा x विशेषता सेट गर्छौं। यस तरीकाले, प्रयोग गर्दै init
विधि, हामी हाम्रा वस्तुहरू प्रारम्भ गर्न सक्छौं। यो विधिलाई कन्स्ट्रक्टर भनिन्छ। हाम्रो कार्यक्रम सञ्चालन गरौं।
अब, हामी पछि x र y समन्वयहरू परिवर्तन गर्न सक्छौं। एक्स समन्वय अपडेट गरौं:
point = Point(10, 20)
point.x = 11
print(point.x)
अब, x समन्वय मान 11 मा अद्यावधिक गरिएको छ।
व्यायाम
यहाँ तपाईंको लागि एक रोचक अभ्यास छ।
म तपाईंलाई एक व्यक्ति भनिने नयाँ प्रकार परिभाषित गर्न चाहन्छु। यी "व्यक्ति" वस्तुहरूमा "name
"विशेषता साथै एक"talk()
"विधि।
यो एक साधारण कार्य हो र केहि मिनेट भन्दा बढी लिनु हुँदैन।
समाधान
यसरी "व्यक्ति" वर्ग परिभाषित गर्न सुरु गर्नुहोस्:
class Person:
self.name = name
हामी पछि कन्स्ट्रक्टर परिभाषित गर्नेछौं। अब, हामी "व्यक्ति" वस्तु सिर्जना गर्न सक्छौं। यसलाई जोन भनौं
john = Person("John Smith")
print(john.name)
john.talk()
अब, कोडको पहिलो भागमा जानुहोस् र कन्स्ट्रक्टर सिर्जना गर्नुहोस्।
def __init__(self, name):
अन्तिम कोड यस्तो देखिनेछ:
तपाइँ वर्ग र कन्स्ट्रक्टरहरूसँग संयोजनमा ढाँचाबद्ध स्ट्रिङहरू र अन्य अवधारणाहरू पनि प्रयोग गर्न सक्नुहुन्छ।
इनहेरिटन्स
इनहेरिटेन्स कक्षाहरूसँग सम्बन्धित अर्को अवधारणा हो जसले तपाईंलाई कोड पुन: प्रयोग गर्न दिन्छ।
कोडको यो टुक्रालाई विचार गर्नुहोस्।
class Dog:
def walk(self):
print("walk")
हामीले "वाक" विधिको साथ "कुकुर" वर्ग सिर्जना गरेका छौं। यस विधिमा, हामी केवल टर्मिनलमा पैदल सन्देश प्रिन्ट गर्दैछौं। मानौं, एउटा वास्तविक कार्यक्रममा, यहाँ एउटा लाइनको सट्टा कोडका १० लाइनहरू छन्। भविष्यमा, यदि अर्को कक्षामा "वाक" विधि आवश्यक छ भने, हामीले ती सबै कोड दोहोर्याउनु पर्नेछ। यो आदर्श होइन।
प्रोग्रामिङमा, हामीसँग DRY भन्ने सिद्धान्त छ जुन आफैलाई नदोहोर्याउनको लागि छोटो छ। भविष्यमा कहिलेकाहीँ भनौं, हामीले हाम्रो "हिँड्ने" विधिको साथ समस्या पत्ता लगाउँछौं र यदि हामीले यो विधिलाई अन्य धेरै ठाउँहरूमा दोहोर्यायौं वा नक्कल गर्यौं भने, हामीले फिर्ता आउनु पर्छ र हामीले यसलाई नक्कल गरेका प्रत्येक ठाउँमा त्यो समस्या समाधान गर्नुपर्नेछ। कोड। त्यसैले प्रोग्रामिङमा हामीले दुई पटक केहि परिभाषित गर्नु हुँदैन।
यस समस्याको समाधानका लागि विभिन्न तरिकाहरू छन् तर यहाँ हामी एक सिक्ने छौं जुन शुरुआतीहरूको लागि सजिलो छ र यसलाई विरासत भनिन्छ। यस अवस्थामा, हामी अर्को वर्ग "स्तनपायी" सिर्जना गर्नेछौं र त्यो वर्गमा हाम्रो "हिँड्ने" विशेषता परिभाषित गर्नेछौं।
class Mammal:
def walk(self):
print("walk")
हाम्रो "स्तनपानी" वर्ग परिभाषित गरेपछि हामी निम्न गुणहरू पास गर्नको लागि इनहेरिटेन्स प्रयोग गर्न सक्छौं:
दुबै कुकुर र बिरालो वर्गहरूले तिनीहरूको अभिभावक वर्गमा परिभाषित सबै वर्ग विधिहरू उत्तराधिकारी छन्। अब, हामी कुकुरहरूको लागि विशेष विधिहरू यस प्रकार थप्न सक्छौं:
class Dog:
def bark(self):
print("bark")
लपेट्नुहोस्!
यो सबै वर्गहरू, निर्माणकर्ताहरू र इनहेरिटेन्स अवधारणाहरू भएका कक्षाहरूमा कोड पुन: प्रयोग गर्ने बारे थियो। अब हामी हाम्रो शृङ्खलाको अन्त्यको नजिक छौं। यस बिन्दुमा, तपाईंले पाइथनमा राम्रो, पढ्न योग्य र संक्षिप्त कोडहरू उत्पादन गर्न सक्षम हुनुपर्दछ।
हामी अर्को लेक्चरमा मोड्युल र प्याकेजहरूको अवधारणा हेर्नेछौं।
जवाफ छाड्नुस्