2016-09-25 5 views
-1

В python 2.7 я пишу класс под названием Zillion, который должен действовать как счетчик для очень больших целых чисел. Я считаю, что у меня это получилось, но я продолжаю работать в TypeError: 'int' object is not callable, что, похоже, означает, что в какой-то момент моего кода я попытался вызвать int, как будто это была функция. Многие из примеров, которые я нашел на этом сайте, были просто математической ошибкой, когда писатель опустил оператора. Кажется, я не могу найти свою ошибку.Объект 'int' не является вызываемой ошибкой в ​​классе

Traceback (most recent call last): 
    File "<pyshell#3>", line 1, in <module> 
    z.increment() 
TypeError: 'int' object is not callable 

Мой код:

class Zillion: 
    def __init__(self, digits): 
     self.new = [] 
     self.count = 0 # for use in process and increment 
     self.increment = 1 # for use in increment 
     def process(self, digits): 
      if digits == '': 
       raise RuntimeError 
      elif digits[0].isdigit() == False: 
       if digits[0] == ' ' or digits[0] == ',': 
        digits = digits[1:] 
       else: 
        raise RuntimeError 
      elif digits[0].isdigit(): 
       self.new.append(int(digits[0])) 
       digits = digits[1:] 
       self.count += 1 
      if digits != '': 
        process(self, digits) 
     process(self, digits) 
     if self.count == 0: 
      raise RuntimeError 

     self.new2 = self.new # for use in isZero 

    def toString(self): 
     self.mystring ='' 
     self.x = 0 
     while self.x < self.count: 
      self.mystring = self.mystring + str(self.new[self.x]) 
      self.x += 1 
     print(self.mystring) 

    def isZero(self): 
     if self.new2[0] != '0': 
      return False 
     elif self.new2[0] == '0': 
      self.new2 = self.new2[1:] 
      isZero(self) 
     return True 

    def increment(self): 
     if self.new[self.count - self.increment] == 9: 
      self.new[self.count - self.increment] = 0 
      if isZero(self): 
       self.count += 1 
       self.new= [1] + self.new 
      else: 
       self.increment += 1 
       increment(self) 
     elif self.new[self.count - self.increment] != 9: 
      self.new[self.count - self.increment] = self.new[self.count - self.increment] + 1 
+1

В какой строке происходит ошибка? Дамп кода не полезен, если вы не можете сообщить нам, где произошла ошибка. Мы не будем пытаться имитировать ошибку, не всю информацию – CDspace

+0

Traceback (самый последний вызов последнего): Файл « », строка 1, в z.increment() TypeError: «INT» объект не является вызываемый Я положил его прямо на топ-человека –

+0

'z' должно быть целым числом, а не экземпляром класса' Zillion'. Не могу сказать из трассы, как вы его определили. – martineau

ответ

1

У вас есть как переменный экземпляр и метод, названный increment, который, кажется, ваша проблема с этим TRACEBACK по крайней мере.

в __init__ вы определяете self.increment = 1 и маскирует метод с тем же именем

Чтобы исправить, просто переименовать один из них (и если это имя переменной, не забудьте изменить все места, которые используют it-- как и во всем методе increment)

Один из способов увидеть, что здесь происходит, - использовать type для расследования. Например:

>>> type(Zillion.increment) 
<type 'instancemethod'> 
>>> z = Zillion('5') 
>>> type(z.incremenet) 
<type 'int'> 
0

Вы определили переменную экземпляра в Zillion.__init__()

def __init__(self, digits): 
     self.new = [] 
     self.count = 0 
     self.increment = 1 # Here! 

Тогда вы определили метод с тем же именем «Zillion.increment()`:

def increment(self): 
    […] 

Так если вы попытаетесь вызвать свой метод следующим образом:

big_number = Zillion() 
big_number.increment() 

.ìncrement будет целым числом, которое вы определили в .__init__(), а не методом.

0

Поскольку у вас есть переменный элемент self.increment, и он был установлен в 1 в вашей функции __init__.

z.increment представляет переменный элемент, который установлен в 1.

Вы можете переименовать функцию от increment к _increment (или любым другим именам), и она будет работа.

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