' INT'对象在类中不可调用错误

时间:2016-09-25 02:34:20

标签: python

在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

3 个答案:

答案 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(或任何其他名称),它会起作用。