2015-03-02 23 views
6

Tôi tương đối mới với python và tôi đang gặp một số vấn đề với không gian tên.tên chức năng không được xác định trong lớp 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

Nó hoạt động, hàm 'abc()' của 'lớp a' được gọi bởi cá thể của nó. –

+3

Tôi nghĩ rằng thay vì 'b.abc()', bạn gọi 'b.test()' nên ném lỗi. Và đó là vì bạn nên gọi 'abc()' với tham chiếu của cá thể lớp. Chỉ cần thay 'abc()' bằng 'self.abc()' trong hàm 'test()' của 'class a'. –

Trả lời

11

Kể từ test() không biết là ai abc, đó msg NameError: global name 'abc' is not defined bạn thấy sẽ xảy ra khi bạn gọi b.test() (gọi b.abc() là tốt), thay đổi nó để:

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

Để gọi từ cùng một lớp, bạn cần từ khóa self.

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

Nếu không có từ khóa self, trăn đang tìm kiếm các abc phương pháp trong phạm vi toàn cầu, đó là lý do tại sao bạn đang nhận được lỗi này.

Các vấn đề liên quan