如何解决此OOP错误?

时间:2015-02-16 10:35:36

标签: python oop

我想了解python oop。但这对我来说并不容易。因此我写了  下面的程序程序(例如1)的python OOP程序(例2),但它没有使用下面的错误。

实施例1,

def factorial(n):  
    num = 1   
    while n >= 1:  
        num = num * n  
        n = n - 1  
    return num   

f = factorial(3)  
print f # 6 

例2

class factorial:

    def __init__(self):


      self.num = 1

    def fact(self,n):
        while n>=1:
            num = self.num * n
            n = n-1
        return num

f = factorial()
ne= factorial.fact(3)
print(ne)

错误

Traceback (most recent call last):
  File "F:/python test/oop test3.py", line 13, in ne= factorial.fact(3)
TypeError: fact() missing 1 required positional argument: 'n'

2 个答案:

答案 0 :(得分:3)

使用您创建的实例来调用方法:

f = factorial() # creates instance of the factorial class
ne = f.fact(3)

或者在没有作业的情况下使用类本身进行调用:

ne = factorial().fact(3) # < parens ()
print(ne)

你也应该错误地使用self.num或者总是得到1作为答案,所以:

class Factorial: # uppercase
    def __init__(self):
        self.num = 1
    def fact(self, n):
        while n >= 1:
            self.num = self.num * n # change the attribute self.num
            n -= 1 # same as n  = n - 1
        return self.num

如果你没有返回你的方法将返回None但你仍然会增加self.num所以如果你不想返回但想要在调用方法后看到self.num的值您可以直接访问该属性:

class Factorial:
    def __init__(self):
        self.num = 1

    def fact(self, n):
        while n >= 1:
            self.num = self.num * n
            n -= 1

ne = Factorial()

ne.fact(5) # will update self.num but won't return it this time
print(ne.num) # access the attribute to see it 

答案 1 :(得分:0)

有三个问题: 1)逻辑错误:应更改num = self.num * n  到self.num = self.num * n,这里num是你正在创建的另一个变量。

2)逻辑错误,但如果第一个被解决,则会出现语法错误:  return num应更改为return self.num

3)语法错误:

f = factorial()
ne= factorial.fact(3)

应该更改为 ne = factorial().fact(3)ne = f.fact(3)