2015-03-02 15 views
6

में अपरिभाषित है, मैं पाइथन के लिए अपेक्षाकृत नया हूं और मुझे नामस्थान के साथ कुछ समस्याएं आ रही हैं।फ़ंक्शन नाम पायथन कक्षा

class a: 
    def abc(self): 
     print "haha" 
    def test(self): 
     abc() 

b = a() 
b.abc() #throws an error of abc is not defined. cannot explain why is this so 
+0

यह काम कर रहा है, 'कक्षा ए' के ​​कार्य 'abc() 'को इसके उदाहरण से बुलाया जाता है। –

+3

मुझे लगता है कि 'b.abc()' के बजाय, आपकी कॉल 'b.test() 'में त्रुटि को फेंकना चाहिए। और ऐसा इसलिए है क्योंकि आपको क्लास इंस्टेंस के संदर्भ में 'abc()' को कॉल करना चाहिए। 'कक्षा ए' के ​​'test()' फ़ंक्शन में 'self.abc() 'के साथ बस' abc()' को प्रतिस्थापित करें। –

उत्तर

11

test() के बाद से जो abc है पता नहीं है, कि संदेश NameError: global name 'abc' is not defined जब आप b.test() आह्वान होना चाहिए देखते हैं (बुला b.abc() ठीक है), के लिए इसे बदल:

class a: 
    def abc(self): 
     print "haha" 
    def test(self): 
     self.abc() 
     # abc() 

b = a() 
b.abc() # 'haha' is printed 
b.test() # 'haha' is printed 
7

आदेश कॉल करने के लिए एक ही कक्षा से विधि, आपको self कीवर्ड की आवश्यकता है।

class a: 
    def abc(self): 
     print "haha" 
    def test(self): 
     self.abc() // will look for abc method in 'a' class 

self कीवर्ड के बिना, अजगर वैश्विक क्षेत्र में abc विधि की तलाश में है, यही वजह है कि आपको यह त्रुटि हो रही है।

संबंधित मुद्दे