簡體   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