2012-09-27 21 views
12

Я совершенно новый для python. Я получил ошибкуTypeError: объект 'bool' не является вызываемым

while not cls.isFilled(row,col,myMap): 
TypeError: 'bool' object is not callable 

Не могли бы вы объяснить, как решить эту проблему? Первая проверка «если» в порядке, но «пока нет» имеет эту ошибку.

def main(cls, args): 
     ... 
     if cls.isFilled(row,col,myMap): 
      numCycles = 0 

     while not cls.isFilled(row,col,myMap): 
      numCycles += 1 


def isFilled(cls,row,col,myMap): 
     cls.isFilled = True 
     ## for-while 
     i = 0 
     while i < row: 
      ## for-while 
      j = 0 
      while j < col: 
       if not myMap[i][j].getIsActive(): 
        cls.isFilled = False 
       j += 1 
      i += 1 
     return cls.isFilled 
+5

Если у кого-то такая же ошибка с Flask-Login: 'current_user.is_authenticated(): TypeError: объект 'bool' не может быть вызван' [этот вопрос] (http://stackoverflow.com/q/32750526/1429387). – naXa

ответ

38

Вы делаете cls.isFilled = True. Это перезаписывает метод с именем isFilled и заменяет его значением True. Этот метод теперь ушел, и вы больше не можете его вызывать. Поэтому, когда вы пытаетесь вызвать его снова, вы получаете сообщение об ошибке, так как его больше нет.

Решение использует другое имя для переменной, чем для этого метода.

0

На самом деле вы можете это исправить со следующими шагами -

  1. ли cls.__dict__
  2. Это даст вам словарь формат вывода, который будет содержать {'isFilled':True} или {'isFilled':False} в зависимости от того, что вы установили.
  3. Удалить эту запись - del cls.__dict__['isFilled']
  4. Теперь вы можете позвонить методу.

В этом случае мы удаляем запись, которая переопределяет метод, упомянутый BrenBarn.

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