2015-03-02 9 views
6

Sono relativamente nuovo in Python e sto riscontrando alcuni problemi con il namespacing.non è definito nella classe 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

Sta funzionando, la funzione 'abc()' di 'class a' è chiamata dalla sua istanza. –

+3

Penso che invece di 'b.abc()', la tua chiamata a 'b.test()' dovrebbe lanciare l'errore. E questo perché dovresti chiamare 'abc()' con il riferimento dell'istanza di classe. Semplicemente sostituisci 'abc()' con 'self.abc()' nella funzione 'test()' di 'class a'. –

risposta

11

Dal test() non sa chi è abc, che msg NameError: global name 'abc' is not defined vedete dovrebbe accadere quando si richiama b.test() (chiamando b.abc() va bene), modificarla in:

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

Per chiamare metodo della stessa classe, è necessario la parola chiave self.

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

Senza la parola chiave self, pitone è alla ricerca per il metodo abc in ambito globale, è per questo che hai trovato questo errore.