我想了解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'
答案 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)