在python中调用递归函数时,'int'对象没有属性

时间:2015-10-09 22:32:59

标签: python python-2.7

不确定下面的Python代码有什么问题。将不胜感激任何帮助。我调查了herehere,但无法解决我的问题。

代码:

class myClass:
    def factorial(n,self):
        if n == 1:
            return 1
        else:
            return n * self.factorial(n-1)

obj = myClass()
obj.factorial(3)            

错误

Traceback (most recent call last):
      File "a.py", line 9, in <module>
        obj.factorial(3)
      File "a.py", line 6, in factorial
        return n * self.factorial(n-1)
    AttributeError: 'int' object has no attribute 'factorial'

3 个答案:

答案 0 :(得分:3)

您转置了factorial的参数名称。引用对象本身必须首先出现。实际上,您正在尝试访问传入号码的factorial变量。将factorial的定义更改为:

def factorial(self, n):
    ...

答案 1 :(得分:1)

self需要是类函数的第一个参数。改变

def factorial(n,self)

def factorial(self, n)

答案 2 :(得分:1)

将您的方法签名更改为

def factorial(self, n)

而不是

def factorial(n, self)

因为当您通过对象调用类方法时。 python期望引用类对象作为第一个参数。在你的情况下它是'int'。这不是对类对象的引用。