2015-03-02 63 views
6

我對python比較陌生,我遇到了一些與命名空間有關的問題。python類中函數名未定義

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

它正在工作,'class a'的函數'abc()'被其實例調用。 – 2015-03-02 08:06:11

+3

我認爲不是'b.abc()',你調用'b.test()'應該拋出錯誤。這是因爲你應該使用類實例的引用來調用'abc()'。只需在'class a'的'test()'函數中用'self.abc()'替換'abc()'。 – 2015-03-02 08:10:35

回答

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關鍵字,Python是尋找一個在全球範圍內abc方法,這就是爲什麼你收到此錯誤。