在python 2.7中,我正在编写一个名为Zillion
的类,它用作非常大的整数的计数器。我相信我已经搞砸了,但是我一直遇到TypeError: 'int' object is not callable
,这似乎意味着在我的代码中的某个时刻我试图调用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
答案 0 :(得分:1)
你有一个实例变量和一个名为increment
的方法,这个方法似乎至少是你的回溯问题。
在__init__
中定义self.increment = 1
并屏蔽具有相同名称的方法
要修复,只需重命名其中一个(如果它是变量名,请确保更改所有使用它的地方 - 比如整个increment
方法)
查看此处发生的情况的一种方法是使用type
进行调查。例如:
>>> type(Zillion.increment)
<type 'instancemethod'>
>>> z = Zillion('5')
>>> type(z.incremenet)
<type 'int'>
答案 1 :(得分: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__()
中定义的整数,而不是方法。
答案 2 :(得分:0)
因为您有一个变量成员self.increment
,并且已在__init__
函数中将其设置为1。
z.increment
表示设置为1的变量成员。
您可以将您的功能从increment
重命名为_increment
(或任何其他名称),它会起作用。