2015-10-12 2 views
1

У меня есть класс python и пара функций, 1-й вызов 2-го. Тем не менее, 2-й никогда не вызывается. Также строка после вызова _method2() никогда не выполняется.Функция внутри класса не называется

class call_methods(): 
    def _method1(self, context): 
      print "Now call method 2"; 
      this._method2(context); 
      print "Finish"; 
      return {} 

    def _method2(self, context={}): 
      print "method 2 called" 
      return {} 

Выход:

Now call method 2 

только первый оператор печати выходит.

Вопрос аналогичен Function Not getting called, но предлагаемое решение не похоже на это.

+2

'self' <-->' this'? и где 'self' как первый аргумент' _method2'? –

+0

Этот код должен дать вам сообщение об ошибке. Что вы можете узнать из сообщения об ошибке? –

+0

'this._method2 (контекст)' должен быть 'self.', так как ваше имя - это имя экземпляра, а не это как в Javascript. Кроме того, вам не нужно заканчивать линии полуколонами. –

ответ

1
this._method2(context); ===> self._method2(context) 

this не существует в python.You должен использовать self .Такж ; не needed.Instead следовать надлежащему indentation.Modify своей второй функции

def _method2(self, context={}): 
+1

Подписи для '_method2' не хватает' self'. Код (как сейчас) будет работать, но это еще одна вещь, о которой нужно знать. –

+0

Это проблема жонглирования между разными языками. Итак, я закончил использовать 'this' вместо' self'. Спасибо за совет. –

0

Оно должно быть:

class call_methods(): 


    def _method1(self,context): 

     print "Now call method 2"; 

     this._method2(context); 

     print "Finish"; 

     return {} 


    def _method2(self, context={}): 

     print "method 2 called" 


     return {} 
1

У вас есть имя this, которое не определено, поэтому Python будет жаловаться. Вы можете изменить ваш второй method_method2() принять аргумент self который, в Python, есть соглашение, обозначающее instance класса вы создали и хотите сослаться:

class call_methods: 
    def _method1(self, context): 
     print "Now call Method 2" 
     self._method2(context) 
     print "finish" 
     return {} 

    def _method2(self, context={}): 
     print "Method 2 Called" 
     return {} 

Если вы хотите вызвать _method2 через _method1 с помощью экземпляр из класса вы создали, вы должны снова обеспечить self аргумент в вызове _methdo2(), который ссылается на экземпляр, это сделано неявно, вызвав функцию на аргументе self_method1.

Ваш выход после изменения будет:

In [27]: cls1 = call_methods() 

In [28]: cls1._method1("con") 
Now call Method 2 
Method 2 Called 
finish 
Out[28]: {} 

P.S: Нет необходимости в скобках () при объявлении класса, это не имеет никакого значения. Вы можете взглянуть на New Style Classes в Python 2

+0

Спасибо за объяснение. Проблема заключалась в использовании 'this' вместо' self'. Тем не менее, python никогда не выдавал ошибку/исключение/предупреждение для использования несуществующей переменной/объекта. Он просто прекратил выполнение. –

Смежные вопросы