Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन नाम त्रुटि:नाम 'स्व' परिभाषित नहीं है समाधान

मान "स्वयं" केवल एक विधि के अंदर उपलब्ध होता है जब किसी फ़ंक्शन को कॉल और निर्दिष्ट किया जाता है।

आप किसी विधि के लिए निर्दिष्ट तर्कों में या किसी फ़ंक्शन के अंदर "स्वयं" को तर्क के रूप में निर्दिष्ट किए बिना "स्वयं" तक नहीं पहुंच सकते हैं। अन्यथा, आपको त्रुटि दिखाई देती है "NameError:नाम 'स्व' परिभाषित नहीं है"।

इस गाइड में, हम इस बारे में बात करते हैं कि इस त्रुटि का क्या अर्थ है और इसे क्यों उठाया जाता है। आपके कोड में इस त्रुटि को हल करने का तरीका जानने में आपकी सहायता करने के लिए हम कुछ कोड स्निपेट के माध्यम से चलते हैं।

NameError:नाम 'स्वयं' परिभाषित नहीं है

"स्व" चर एक वर्ग के अंदर किसी वस्तु के बारे में जानकारी रखता है। किसी ऑब्जेक्ट को असाइन किए गए सभी मान "स्वयं" चर में उपलब्ध हैं।

यदि आप इसे किसी विधि में उपयोग करना चाहते हैं तो "स्वयं" को तर्क के रूप में पारित किया जाना चाहिए। "स्व" चर का उपयोग किसी विधि में अन्य तर्कों में नहीं किया जा सकता है क्योंकि यह केवल एक विधि के भीतर से ही पहुँचा जा सकता है।

आप "NameError:नाम 'स्व' परिभाषित नहीं है" त्रुटि का सामना करते हैं यदि आप:

  • "स्वयं" को तर्क के रूप में निर्दिष्ट न करें
  • किसी अन्य तर्क में तर्क के रूप में "स्वयं" का प्रयोग करें

आइए एक-एक करके इनमें से प्रत्येक परिदृश्य पर चलते हैं।

परिदृश्य #1:"स्वयं" तर्क के रूप में सूचीबद्ध नहीं है

एक विधि में सुलभ होने के लिए "स्वयं" को एक तर्क के रूप में सूचीबद्ध किया जाना चाहिए। "स्व" एक वैश्विक चर नहीं है। यह एक वर्ग के अंदर स्थानीय है।

81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।

बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।

एक प्रोग्राम लिखें जिसमें एक कक्षा में फिल्मों के बारे में जानकारी हो। हम अपनी कक्षा को एक ऐसे कंस्ट्रक्टर के साथ परिभाषित करके शुरू करते हैं जो हमारी फिल्म के बारे में मूल्य रखता है:

class Movie:
	def __init__(self, name, year_released):
			self.name = name
			self.year_released = year_released

हमारी कक्षा में दो मान हो सकते हैं:एक फिल्म का नाम और जिस वर्ष इसे रिलीज़ किया गया था। इसके बाद, हम एक विधि घोषित करते हैं जो हमें "year_released" के मान को बदलने देती है:

	def change_year(year_released):
		   self.year_released = year_released
		   print("{} was released in {}.".format(self.name, self.year_released))

अपने कोड का परीक्षण करने के लिए, हम अपनी कक्षा का एक ऑब्जेक्ट बनाते हैं। यह वस्तु 1996 में रिलीज़ हुई फ़िल्म हैप्पी गिलमोर का प्रतिनिधित्व करती है:

happy_gilmore = Movie("Happy Gilmore")
happy_gilmore.change_year(1996)

हमने change_year() . को कॉल किया है हमारी वस्तु पर विधि ताकि हम फिल्म को 1996 में रिलीज़ होने का वर्ष निर्धारित कर सकें। आइए अपना कोड चलाएं और देखें कि क्या यह काम करता है:

Traceback (most recent call last):
  File "main.py", line 11, in <module>
	happy_gilmore.change_year()
  File "main.py", line 7, in change_year
	self.year_released = year_released
NameError: name 'self' is not defined

हमारा कोड एक त्रुटि देता है।

यह त्रुटि इसलिए उठाई गई है क्योंकि हमने अपनी पद्धति के तर्क के रूप में "स्व" को पारित नहीं किया है। हम change_year() . में पहले तर्क के रूप में "स्वयं" जोड़कर इस त्रुटि को ठीक करते हैं विधि:

def change_year(self, year_released):
		self.year_released = year_released
		print("{} was released in {}.".format(self.name, self.year_released))

हमारा कोड फिर से चलाएँ:

Happy Gilmore was released in 1996.

हमारा कोड सफलतापूर्वक चलता है!

परिदृश्य #2:किसी अन्य तर्क में तर्क के रूप में "स्वयं" का उपयोग करना

जब कोई फ़ंक्शन कहा जाता है तो "स्वयं" का मूल्यांकन किया जाता है। इसका मतलब है कि आपके पास एक तर्क नहीं हो सकता है जो फ़ंक्शन कॉल में निर्दिष्ट तर्कों की सूची में "स्वयं" को संदर्भित करता है।

हमारी "year_released" पद्धति को अपडेट करें ताकि, यदि रिलीज़ का एक अलग वर्ष निर्दिष्ट नहीं किया गया है, तो कंसोल पर एक संदेश छपा हुआ है जो हमें बता रहा है कि मूवी का वर्ष नहीं बदला गया है।

हम अपने कोड में एक डिफ़ॉल्ट तर्क सेट करके ऐसा कर सकते हैं:

def change_year(self, year_released=self.year_released):
	if year_released != self.year_released:
		self.year_released = year_released
		print("{} was released in {}.".format(self.name, self.year_released))
	else:
		print("This movie has not been changed.")

	print(year_released)

"year_released" में अब "self.year_released" का डिफ़ॉल्ट मान है। इसका अर्थ यह है कि यदि हम वह मान निर्दिष्ट नहीं करते हैं जिसमें वर्ष बदला जाना चाहिए, तो एक डिफ़ॉल्ट मान सेट हो जाता है। यदि हम कोई मान निर्दिष्ट करते हैं, तो हमारे द्वारा निर्दिष्ट मान डिफ़ॉल्ट के बजाय उपयोग किया जाता है।

यदि हमारे द्वारा निर्दिष्ट मान "self.year_released" के मान के बराबर नहीं है, तो "self.year_released" का मान बदल जाता है। अन्यथा, कंसोल पर एक संदेश मुद्रित होता है जो उपयोगकर्ता को बताता है कि फिल्म को बदला नहीं गया है।

हमारे if . के बाद कथन का मूल्यांकन किया गया है, "year_released" का मान कंसोल पर मुद्रित होता है।

चलिए अपना कोड चलाते हैं:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
	class Movie:
  File "main.py", line 6, in Movie
	def change_year(self, year_released=self.year_released):
NameError: name 'self' is not defined

हमारा कोड एक त्रुटि उठाता है। ऐसा इसलिए है क्योंकि हमने अपने तर्कों की सूची में एक अन्य तर्क में "स्व" का उपयोग करने का प्रयास किया है।

हम अपने तर्कों की सूची के बजाय "year_released" चर के मान को "self.year_released" पर हमारे फ़ंक्शन के अंदर सेट करके इस त्रुटि को ठीक कर सकते हैं:

def change_year(self, year_released=None):
	if year_released != self.year_released:
		self.year_released = year_released
		print("{} was released in {}.".format(self.name, self.year_released))
	else:
		year_released = self.year_released
		print("This movie has not been changed.")

	print(year_released)

इस कोड में, हम "year_released" को "self.year_released" के बराबर सेट करते हैं यदि हम अपने फ़ंक्शन कॉल में "year_released" के लिए कोई मान निर्दिष्ट नहीं करते हैं।

आइए हमारे कोड का परीक्षण करने के लिए एक नया मूवी ऑब्जेक्ट बनाएं:

happy_gilmore = Movie("Happy Gilmore", 1995)
happy_gilmore.change_year(1996)

हमने गलत तरीके से निर्दिष्ट किया है कि हैप्पी गिलमोर को 1995 के रूप में रिलीज़ किया गया था। हमें इसे change_year() का उपयोग करके बदलने की आवश्यकता है। तरीका। हमारा कोड लौटाता है:

Happy Gilmore was released in 1996.
1996

हमारा कोड सफलतापूर्वक निष्पादित किया गया था। आइए यह देखने के लिए हमारे कोड का परीक्षण करें कि क्या होता है यदि "year_released" का मान पहले से ही change_year() में निर्दिष्ट मान के बराबर है। तरीका:

happy_gilmore = Movie("Happy Gilmore", 1996)
happy_gilmore.change_year(1996)

हमारा कोड लौटाता है:

This movie has not been changed.
1996

हमारा कोड else . को निष्पादित करता है हमारे कोड में बयान और फिर हमें बताता है कि फिल्म बदली नहीं गई है।

निष्कर्ष

"नाम त्रुटि:नाम 'स्व' परिभाषित नहीं है" त्रुटि तब उठाई जाती है जब आप "स्वयं" को स्थितिगत तर्क के रूप में निर्दिष्ट करना भूल जाते हैं या जब आप तर्कों की सूची में किसी अन्य तर्क में "स्वयं" का उपयोग करते हैं।

आप यह सुनिश्चित करके इस त्रुटि को हल करते हैं कि "स्व" का उपयोग करने वाले फ़ंक्शन में सभी विधियों में तर्कों की सूची में "स्वयं" शामिल है। यदि वह काम नहीं करता है, तो सुनिश्चित करें कि तर्कों की सूची में कोई भी तर्क उनके डिफ़ॉल्ट मानों के लिए "स्वयं" पर निर्भर नहीं करता है।

अब आप एक पेशेवर डेवलपर की तरह इस पायथन त्रुटि को हल करने के लिए तैयार हैं!


  1. पायथन में न्यूनतम ढेर

    यहां हम देखेंगे कि एक स्टैक कैसे बनाया जाता है, जो निरंतर समय में पुश, पॉप, टॉप और न्यूनतम तत्व को पुनः प्राप्त कर सकता है। तो फ़ंक्शन पुश (x), पॉप (), शीर्ष () और getMin () होंगे इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - न्यूनतम तत्व द्वारा स्टैक को इनफिनिटी के रूप में प्रारंभ करें पुश ऑपर

  1. पायथन में विरासत

    इस लेख में, हम पायथन 3.x में इनहेरिटेंस और एक्सटेंडिंग क्लासेस सीखेंगे। या पहले। वंशानुक्रम वास्तविक दुनिया के संबंधों का अच्छी तरह से प्रतिनिधित्व करता है, पुन:प्रयोज्य प्रदान करता है और पारगमन का समर्थन करता है। यह तेजी से विकास समय, आसान रखरखाव और विस्तार में आसान प्रदान करता है। वंशानुक्रम को

  1. पायथन में NameError अपवाद कैसे पकड़ें?

    जब आपका कोड किसी ऐसे नाम को संदर्भित करता है जो वर्तमान दायरे में मौजूद नहीं है, तो NameErrors उठाए जाते हैं। उदाहरण के लिए, एक अयोग्य चर नाम। अपवाद को पकड़ने और उसके प्रकार को खोजने के लिए दिए गए कोड को निम्नानुसार फिर से लिखा गया है। उदाहरण import sys try: def foo(): print magnolia foo() except Na