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