2015-03-02 17 views
6

Jestem stosunkowo nowy w Pythonie i mam pewne problemy z ustawieniem przestrzeni nazw.nazwa funkcji jest niezdefiniowana w klasie Pythona

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

Działa, funkcja 'abc()' z 'klasy a' jest wywoływana przez jej instancję. –

+3

Myślę, że zamiast 'b.abc()', twoje wywołanie 'b.test()' powinno wyrzucać błąd. A to dlatego, że powinieneś wywoływać 'abc()' z referencją instancji klasy. Po prostu zamień 'abc()' na 'self.abc()' w 'test()' funkcji 'class a'. –

Odpowiedz

11

test() Ponieważ nie wiem, kto jest abc, że MSG NameError: global name 'abc' is not defined widać powinno się zdarzyć, kiedy powoływać b.test() (wywołanie b.abc() jest w porządku), zmień go na:

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

W celu wywołania metoda z tej samej klasy, potrzebujesz słowa kluczowego self.

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

bez słowa kluczowego self, pyton szuka sposobu w zakresie globalnym abc, dlatego otrzymujesz ten błąd.

Powiązane problemy