имя функции не определено в классе python

Я относительно новичок в python, и у меня есть некоторые проблемы с пространством имен.

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

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

person aceminer    schedule 02.03.2015    source источник
comment
Он работает, функция abc() из class a вызывается его экземпляром.   -  person Vivek Sable    schedule 02.03.2015
comment
Я думаю, что вместо b.abc() ваш вызов b.test() должен вызывать ошибку. И это потому, что вы должны вызывать abc() со ссылкой на экземпляр класса. Просто замените abc() на self.abc() в test() функции class a.   -  person Anonymous    schedule 02.03.2015


Ответы (2)


Поскольку 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
person Paul Lo    schedule 02.03.2015

Чтобы вызвать метод из того же класса, вам нужно ключевое слово self.

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

Без ключевого слова self python ищет метод abc в глобальной области видимости, поэтому вы получаете эту ошибку.

person Beri    schedule 02.03.2015