[英]Object Oriented example in Python
我知道它愚蠢的问题,但是我试图掌握Python中OOP的概念。 假设我想以程序形式编写阶乘程序 ,我会这样做
def factorial(n):
num = 1
while n >= 1:
num = num * n
n = n - 1
return num
f = factorial(3)
print f # 6
现在,我想以OO方式重写相同的析因程序。 我没有得到如何使用对象和类编写相同的函数。
class Factorial():
def fact(n):
num = 1
while n >= 1:
num = num * n
n = n - 1
return num
f = Factorial()
a = f.fact(3)
print a # TypeError: fact() takes exactly 1 argument (2 given)
我知道可以通过使用lambda和其他方式以功能方式更精确地完成此操作,但是我正在学习OOP的概念。 我做错了什么?
调用实例方法时,默认情况下,当前对象作为第一个参数传递给函数。 就你而言
def fact(n):
当你这样称呼它
a = f.fact(3)
它实际上会像这样
a = fact(f, 3)
传递当前对象的原因是,让实例方法对对象进行更改。 (请记住,Python像其他语言一样没有其他关键字this
)。
但是您函数的签名与此不匹配(它只需要一个参数)。 这就是为什么它抛出
# TypeError: fact() takes exactly 1 argument (2 given)
要解决此问题,您必须将签名更改为以下内容
def fact(self, n):
现在, self
参数将接收正在传递的当前对象。
您忘记了self
参数:
class Factorial():
def fact(self,n): #Forgot the self parameter huh?
num = 1
while n >= 1:
num = num * n
n = n - 1
return num
我建议您也阅读以下内容:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.