繁体   English   中英

Python中的面向对象示例

[英]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

我建议您也阅读以下内容:

我还建议阅读以下文章:

Python面向对象概念简介,第1部分

不幸的是,我最多只能放置2个链接,但是我敢肯定您会在其中找到其他4个部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM