2015-04-18 29 views
-3

您好香港專業教育學院只被現在的編碼約3星期,我碰到這個代碼時,我把它放在什麼也不做絆倒了。新的Python類和對象

class calculation(object): 

def multiply(self, a=5, b=6): 
    self.a = a 
    self.b = b 

我知道它的簡單,但我編程方面我還是一個新手,如果有人能給出一個簡單的解釋,爲什麼這不起作用,我真的很感激它。謝謝

+2

爲什麼這個標籤C++?而你的意思是*什麼都不做*?由於縮進縮減,這甚至不是有效的Python代碼。 – Praetorian

+0

類計算(對象): \t DEF相乘(個體中,a = 5,B = 6): \t \t self.a =一個 \t \t self.b = B –

+0

@KhalilG。您可以通過按編輯按鈕來編輯您的帖子。請修正縮進,如果這是你打算對你的評論做什麼。 –

回答

1

它不會因爲壓痕錯誤的工作。縮進是Python如何知道def是一個類的方法而不是頂級的普通函數,它是如何知道哪些行是循環的一部分以及循環結束的地方等等。你必須正確地做到這一點。但是,你有這樣的:

class calculation(object): 

def multiply(self, a=5, b=6): 
    self.a = a 
    self.b = b 

因爲def被dedented回到同一水平爲class,還有裏面的類什麼都沒有。這不合法;每個複合語句(以類似於類定義的語句結尾爲:)必須後跟一個縮進的東西。

最重要的是,multiply參數爲self這一事實意味着它幾乎可以肯定是某種類的方法。

因此,要解決這個問題:

class calculation(object): 

    def multiply(self, a=5, b=6): 
     self.a = a 
     self.b = b 

而現在,它的工作原理。但它似乎沒有做任何事情,是嗎?

當然總是有可能你沒有複製整個事情。或者,無論你從哪裏複製它,代碼都是錯誤的並且缺少一行。但讓我們假設這真的是一個有用的函數,從某人的有用代碼(除了縮進錯誤)。

首先,你要做的就是定義一個類。如果從不創建該類的實例,更不用說調用任何方法,那麼該類就不會執行任何操作。但是讓我們假設你知道這一點,並且你知道如何創建一個實例並調用方法。它仍然似乎沒有做任何事情。

最有可能(再次,假設這是你真正要求的,並且你複製了代碼,並且......)這樣做的是存儲操作數以便稍後使用。

一個現實的例子是,你爲什麼想要這麼做會出現在某種表達樹庫中,它在解析*時調用multiply,並逐漸建立複雜的表達式,也許這樣你就可以可以將表達式編譯爲C代碼或對其進行代數轉換。

但是,這或許聽起來像是官樣文章來你,所以這裏是一個簡單而愚蠢的例子:

class calculation(object): 

    def multiply(self, a=5, b=6): 
     self.a = a 
     self.b = b 

table = [] 
for a in range(1, 5): 
    row = [] 
    for b in range(1, 5): 
     col = calculation() 
     col.multiply(a, b) 
     row.append(col) 
    table.append(row) 

print('Times table') 
for row in table: 
    for col in row: 
     print('{} x {} = {}'.format(col.a, col.b, col.a * col.b)) 
0

您的問題是class內部的函數是錯誤的。嘗試縮進。另外,您multiply功能,你可能想返回兩個值乘以:

class calculation(object): 
    def multiply(self, a=5, b=6): 
     self.a = a 
     self.b = b 
     return self.a * self.b