क्यों इस तरह संरचनाNameError: नाम 'स्वयं'
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
एक त्रुटि NameError: name 'self' is not defined
देता परिभाषित नहीं है?
क्यों इस तरह संरचनाNameError: नाम 'स्वयं'
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
एक त्रुटि NameError: name 'self' is not defined
देता परिभाषित नहीं है?
फ़ंक्शन डिफाईन-टाइम पर डिफ़ॉल्ट तर्क मान का मूल्यांकन किया जाता है, लेकिन self
फ़ंक्शन कॉल समय पर केवल एक तर्क उपलब्ध है। इस प्रकार तर्क सूची में तर्क एक-दूसरे को संदर्भित नहीं कर सकते हैं।
यह एक आम पैटर्न None
लिए एक तर्क डिफ़ॉल्ट और कोड में है कि के लिए एक परीक्षण को जोड़ने के लिए है:
def p(self, b=None):
if b is None:
b = self.a
print b
मामलों में जहां आप भी कोई नहीं करने के लिए 'बी' करने का विकल्प है करना चाहते हैं के लिए:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
यह सुनिश्चित नहीं है कि इसके बारे में अत्यधिक जटिल क्या है। अपने स्वयं के समाधान के साथ झुकाव के लिए स्वतंत्र महसूस करें जो बी के सभी मूल्यों को संरक्षित करता है। – Andrew
यदि आप यहां Google के माध्यम से पहुंचे हैं, तो कृपया यह सुनिश्चित करना सुनिश्चित करें कि आपने स्वयं को वर्ग फ़ंक्शन के लिए पहला पैरामीटर दिया है। विशेष रूप से यदि आप फ़ंक्शन के अंदर उस ऑब्जेक्ट के मानों को संदर्भित करने का प्रयास करते हैं।
def foo():
print(self.bar)
> NameError: नाम 'स्वयं' परिभाषित नहीं है
def foo(self):
print(self.bar)
> "बधाई हो आपको NameError से छुटकारा मिला!"
हालांकि मुझे लगता है कि उपर्युक्त बहुत सुंदर नहीं है (मैं रूबी से आती हूं जहां चीजें ठीक काम करती हैं), उपर्युक्त वास्तव में एक कामकाज के रूप में काम करता है। यह अभी भी अजीब है कि पायथन ने पैरामीटर सूची में स्वयं अनुपलब्ध होना चुना है। – shevy